当前位置: 首页 > news >正文

【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/mydbusername: rootpassword: 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: 30email: "alice@example.com"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 hobbies;
}

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

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

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

五、常用配置示例

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

总结

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

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

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

http://www.gsyq.cn/news/131258.html

相关文章:

  • 【中小美发门店逆袭利器】:基于Open-AutoGLM的零代码预约系统搭建指南
  • 本地化与国际化测试的完整实施方案
  • 网页如何设计.NET Core大文件上传的日志记录与监控系统?
  • 健身卡总约不上?是时候启用Open-AutoGLM智能轮询策略了
  • 【Linux 网络基础】HTTPS 技能文档
  • 2025年成都有名的楼板搭建公司哪家好,现浇楼梯/楼梯现浇/现浇阳台/现浇搭建/现浇搭建/钢筋混凝土现浇/楼板现浇楼板搭建公司哪个好有哪些 - 品牌推荐师
  • 网格属性 Mesh properties
  • 掌握这4种调优技巧,让你的 Open-AutoGLM 查询准确率突破95%
  • 传统美甲预约正在被淘汰?Open-AutoGLM带来的5大颠覆性变革
  • Open-AutoGLM到底多强大?实测对比10种预约方案后我惊了
  • 手把手教你部署Open-AutoGLM(从环境配置到高并发应对完整流程)
  • JavaSE——四句代码绘制窗体
  • Spoop学习总结
  • 11.28
  • 学习笔记十五:连续与缺失值 - 详解
  • 10.30
  • 理发预约困局终结者:如何用Open-AutoGLM实现秒级响应与动态调优
  • 什么是Numpy?
  • 10.9
  • 为什么90%的KTV都在接入Open-AutoGLM?真相令人震惊
  • 【限时稀缺教程】:用Open-AutoGLM实现毫秒级电影票抢购,成功率提升90%
  • 我发现多尺度因果图漏不确定性,后来补鲁棒优化才稳住治疗策略
  • 人工智能之数字生命--从点云 → 自动子存在生成4
  • 当答辩PPT,成了扼杀学术表达的最后一道屏障
  • 搞懂大数据CAP定理,为大数据项目保驾护航
  • 人工智能之数字生命--人类是如何“自然地”把人体划分为头、手臂、躯干、腿等部分的?
  • 宠物门店效率提升300%的秘密(Open-AutoGLM自动化预订实战案例)
  • 第40次CCFCSP认证邮寄
  • Excalidraw API接口调用示例:自动化绘图集成方案
  • Open-AutoGLM健身卡预约实战指南(从配置到上线全流程曝光)