【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

计算机毕业设计java基于Java的物业管理系统 基于SpringBoot的智慧社区物业综合管理平台 设计住宅小区物业服务与业主报修系统的研发

计算机毕业设计java基于Java的物业管理系统 基于SpringBoot的智慧社区物业综合管理平台 设计住宅小区物业服务与业主报修系统的研发

计算机毕业设计java基于Java的物业管理系统97wd59 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着城市化进程的加快和住宅小区的规模化发展,物业管理在社区治理和居民生活中扮演着越来越重要的角色。传统物业管理方式依赖人工登记、电话沟通和纸质单据,存在信息更新滞后、报修处理缓慢、费用收缴混乱、投诉反馈不畅等问题,给物业管理人员和业主带来了诸多不便。尤其是在停车管理、费用催缴、维修报备等环节,缺乏系统化支持直接影响服务质量和居民满意度。为解决这一痛点,本系统基于Java技术与SpringBoot框架,结合MySQL数据库,设计并开发了一套功能完善的物业管理系统,旨在为物业公司提供高效的运营管理工具,同时为业主打造便捷的线上服务平台。 本系统围绕物业管理与业主服务的核心业务,构建了以下功能模块: * 业主管理:记录业主详细信息,包括业主账号、姓名、性别、楼房号、车牌号、联系方式、头像等 * 车位信息管理:管理小区车位资源,包括车位编号、车位名称、图片、位置、车位状态、发布时间、详情等 * 停车信

By Ne0inhk
运用Java及SunriseSunsetCalculator,探寻长沙市的理论日照时长

运用Java及SunriseSunsetCalculator,探寻长沙市的理论日照时长

目录 前言 一、理论日照时长简介 1、理论日照时长计算 2、理论日照时长数学计算 二、SunriseSunsetCalculator求解 1、SunriseSunsetCalculator引入 2、时区计算设置 3、理论时长计算 4、完整的代码及日常统计 三、总结 前言         在地理学与气象学的研究领域,日照时长一直是备受关注的重要指标。它不仅与地球的自转、公转以及大气环流等诸多自然因素紧密相连,更对人类的生产生活有着深远的影响。从农作物的生长周期到太阳能资源的开发利用,从城市的规划布局到居民的健康生活,日照时长都扮演着不可或缺的角色。而长沙市,作为湖南省的省会城市,以其独特而复杂的地理环境和气候特征,其日照时长的研究具有重要的现实意义和学术价值。         长沙市地处中国南方,属于亚热带季风气候区。这里四季分明,降水充沛,但同时也存在着云层覆盖多、日照时间相对较短等特点。随着城市化进程的加速和经济的快速发展,对于日照时长的精准把握需求日益迫切。一方面,城市规划者需要了解日照时长的分布规律,以合理规划城市建筑布局,确保居民住宅和公共设施能

By Ne0inhk

Java 反射

Java 反射 Java 反射(Reflection)是 Java 语言的一个强大特性,它允许在运行时动态地获取类的信息并操作对象,即使在编译时并不知道这些类的具体结构。 ✅ 一句话理解反射: “程序可以在运行时查看、调用自身或外部类的属性、方法、构造器等,而无需在编译时硬编码。” 一、反射能做什么? 通过反射,你可以: 1. 获取类的 Class 对象 2. 查看类的字段(Field)、方法(Method)、构造器(Constructor) 3. 创建对象实例(即使构造器是 private) 4. 调用任意方法(包括 private 方法) 5. 读写任意字段(包括 private 字段) ⚠️ 注意:反射会绕过访问控制检查(如 private),但需先调用

By Ne0inhk
基于Java的财务报销管理系统的设计与实现

基于Java的财务报销管理系统的设计与实现

一、研究目的 在教育信息化深度推进的背景下,传统校园财务报销模式存在流程繁琐、人工审核效率低、单据管理混乱、数据统计滞后等痛点,难以满足师生便捷报销、财务部门精准管控的需求[1]。同时,高校经费来源多元化、报销业务量激增、审计合规性要求提升,倒逼财务工作数字化转型。在此趋势下,构建校园财务报销管理系统,成为优化报销流程、降低管理成本、提升服务质量与监管效能的必然选择。 本选题旨在针对传统校园财务报销流程繁琐、人工审核效率低下、单据管理混乱、数据统计不及时等痛点,设计并实现一套数字化、智能化的财务报销管理系统[2]。通过线上提交、自动审核、数据联动等功能,简化报销流程,降低财务人员工作强度,提升报销效率与数据准确性;同时强化经费使用监管,规范报销审批流程,满足高校经费多元化管理需求,为师生提供便捷、高效的财务服务,推动校园财务管理数字化转型[3]。 本选题具有重要的实践价值与应用意义,可从师生用户、财务部门、校园管理三个角度分析:对师生而言,系统实现报销流程线上化,简化提交、审批步骤,减少往返奔波,提升报销体验;

By Ne0inhk