【Java 开发日记】有了解过 SpringBoot 的参数配置吗?

【Java 开发日记】有了解过 SpringBoot 的参数配置吗?

目录

核心概念:application.properties 与 application.yml

配置的加载位置与优先级

外部化配置(非常强大)

如何在代码中获取配置值?

常用配置示例

总结


当然了解,Spring Boot 的参数配置是其核心特性之一,也是它实现“约定大于配置”理念的关键。它极大地简化了传统 Spring 应用中繁琐的 XML 配置。

一、核心概念:application.propertiesapplication.yml

Spring Boot 默认使用这两种文件进行配置(二者选其一即可,.yml 更常用)。

application.properties (传统键值对格式)

server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret logging.level.com.example.demo=debug

application.yml (YAML 格式,层次感更强,推荐使用)

server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: secret logging: level: com.example.demo: debug

YAML 注意事项:缩进必须使用空格,不能使用 Tab 键,冒号后面必须有一个空格。

二、配置的加载位置与优先级

Spring Boot 会从以下位置按从高到低的优先级加载 application 配置文件(高优先级的配置会覆盖低优先级的配置):

  1. 当前项目根目录下的/config子目录
  2. 当前项目根目录
  3. classpath 下的/config (即 src/main/resources/config)
  4. classpath 根路径 (即 src/main/resources)

最佳实践:在开发时,将通用配置放在 src/main/resources/application.yml 中。在打包部署时,可以在 JAR 包所在目录创建一个 config 文件夹,里面放一个 application.yml 来覆盖开发环境的配置(如数据库连接),这样就实现了配置与代码分离

三、外部化配置(非常强大)

除了配置文件,Spring Boot 还支持多种外部配置方式,优先级高于application.yml。这在容器化部署(如 Docker)时尤其有用。

  1. 命令行参数
java -jar yourapp.jar --server.port=8888 --spring.datasource.url=jdbc:mysql://prod-server:3306/proddb
  1. 操作系统环境变量
    Spring Boot 会自动识别形如 SPRING_DATASOURCE_URL 的环境变量(注意大小写和下划线)。
  2. Profile-specific 配置(多环境配置)这是管理不同环境(开发、测试、生产)配置的最佳方式。在通用的 application.yml 中,通过 spring.profiles.active 属性来激活特定环境的配置。
    • 配置文件命名规则:application-{profile}.yml
    • 例如:
      • application-dev.yml (开发环境)
      • application-test.yml (测试环境)
      • application-prod.yml (生产环境)

application.yml

spring: profiles: active: dev # 默认激活开发环境

激活方式

  • 在配置文件中设置(如上所示)。
  • 命令行激活:java -jar yourapp.jar --spring.profiles.active=prod
  • JVM 参数:-Dspring.profiles.active=test
  • 环境变量:export SPRING_PROFILES_ACTIVE=prod

四、如何在代码中获取配置值?

@Value 注解 (适用于单个属性)

@Component public class MyComponent { @Value("${server.port}") private int serverPort; @Value("${app.message: Hello Default}") // 使用冒号指定默认值 private String message; // ... }

@ConfigurationProperties注解 (推荐,用于绑定一组配置)

这是更类型安全、更面向对象的方式。

步骤 1:在 application.yml 中定义配置

app: user: name: "Alice" age: 30 email: "[email protected]" hobbies: - reading - hiking

步骤 2:创建一个配置类来绑定这些属性

@Component @ConfigurationProperties(prefix = "app.user") // 前缀是 app.user @Data // Lombok 注解,自动生成 getter/setter // 或者也可以手动写 getter 和 setter public class UserProperties { private String name; private Integer age; private String email; private List<String> hobbies; }

步骤 3:在需要的地方注入并使用

@Service public class MyService { @Autowired private UserProperties userProperties; public void doSomething() { System.out.println("User name: " + userProperties.getName()); System.out.println("User hobbies: " + userProperties.getHobbies()); } }

别忘了在启动类上添加 @EnableConfigurationProperties 注解(但如果你像上面一样在配置类上使用了 @Component,则不需要)。

五、常用配置示例

# 服务器配置 server: port: 8080 servlet: context-path: /api # 应用上下文路径 # 数据源配置 spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # JPA 配置 jpa: hibernate: ddl-auto: update # 生产环境不要用 create-drop 或 update show-sql: true # 日志配置 logging: level: root: info org.springframework.web: debug com.example: trace file: name: logs/myapp.log # 输出到文件 # 自定义配置 myapp: feature: enabled: true api-url: https://api.example.com

总结

Spring Boot 的参数配置系统非常灵活和强大,其核心思想是:

  • 约定大于配置:提供了大量默认配置,开箱即用。
  • 配置外部化:允许你通过文件、命令行、环境变量等多种方式覆盖默认配置,轻松适应不同环境。
  • 类型安全绑定:通过 @ConfigurationProperties 可以轻松地将一组配置映射到 Java Bean 上,是管理自定义配置的首选方式。

如果小假的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!

Read more

深入剖析:按下 F5 后,浏览器前端究竟发生了什么?

深入剖析:按下 F5 后,浏览器前端究竟发生了什么?

文章目录 * 概述 * 一、关键前提:三种导航方式的本质区别 * 二、核心概念:强缓存 vs 协商缓存 * 1. 强缓存(Strong Caching) * 2. 协商缓存(Revalidation Caching) * 三、F5 刷新全景流程图 * 四、F5 刷新的完整生命周期详解 * 阶段一:主文档(HTML)的缓存验证与获取 * 阶段二:HTML 解析与渲染流水线(Critical Rendering Path) * 阶段三:子资源(CSS/JS/IMG)的缓存处理 * 五、对比总结:F5 与其他操作的本质差异 * 六、给前端开发者的实践建议 * 七、结语 概述 在前端开发中,

By Ne0inhk

Flutter 三方库 deepyr 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、高颜值的类型安全 daisyUI 响应式 Web 应用架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 deepyr 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、高颜值的类型安全 daisyUI 响应式 Web 应用架构 在鸿蒙(OpenHarmony)系统的分布式 Web 容器、轻量级 JS 服务或高性能 Web 控制台中,如何快速搭建一套既符合现代审美又具备强类型约束的 UI?deepyr 做为对 daisyUI 组件库的类型安全(Typesafe)封装,为鸿蒙上的 Jaspr Web 应用提供了极致流畅的开发体验。本文将带您领略其在鸿蒙生态中的美学实战。 前言 什么是 Deepyr?它是一套基于 Jaspr(下一代 Dart Web 框架)的 UI

By Ne0inhk
【狂热算法篇】探寻图论幽径之SPFA算法:图论迷宫里的闪电寻径者(通俗易懂版)

【狂热算法篇】探寻图论幽径之SPFA算法:图论迷宫里的闪电寻径者(通俗易懂版)

本篇带大家探究的是SPFA算法;从基本理解,画图分析展示,再到最后的代码实现,以及为何要这样实现代码,等一些细节问题做解释,相关题型应用,非常值得哟,尤其是刚入门的小白学习;干货满满,通俗易懂;欢迎大家点赞收藏阅读呀!!!   欢迎拜访:羑悻的小杀马特.-ZEEKLOG博客 本篇主题:秒懂百科之SPFA算法的深度剖析 制作日期:2025.08.12 隶属专栏: 图论学习专栏   美妙的算法世界专栏 图论系列算法参考图:  目录: 一·本算法背景: 二·算法核心思想及实例模拟操作: 三.算法详细步骤:  3.1初始化操作: 3.2队列迭代松弛阶段: 3.3提速小优化: 3.4检查是否存在负环: 四.代码实现: 五·代码实例测试: 六.小细节及疑点剖析: 6.1 为什么可以通过队列进行Bellman-Ford算法的优化操作: 6.

By Ne0inhk

五种排序算法(C语言实现)

五种经典排序算法 文章目录 * 五种经典排序算法 * 冒泡排序 * 插入排序 * 选择排序 * 快速排序 * 归并排序 * 总结 冒泡排序 1. 代码实现 总体思路 通过对待排序序列从前向后(从下标较小的元素开始),依次对相邻两个元素的值进行两两比较,若发现前一个数大于后一个数则交换,使值较大的元素逐渐从前移向后部,就如同水底下的气泡一样逐渐向上冒 示意图: #include<stdio.h>voidBubble_Sort(int arr[],int n){for(int i =0; i < n -1; i++)//外层循环控制轮数,即遍历数组的次数,每一轮会确定一个最大值放到末尾{for(int j =0; j < n

By Ne0inhk