2025-03-26
编程
00
请注意,本文编写于 33 天前,最后修改于 33 天前,其中某些信息可能已经过时。

目录

1. 配置文件的位置和优先级
2. 配置文件的格式
2.1 application.properties
2.2 application.yml 和 application.yaml
3. 常用配置项
3.1 服务器相关
4. 多环境配置
5. 配置文件加密
6. 自定义配置文件
方法一:通过命令行参数
方法二:通过代码指定

Spring Boot 使用配置文件来管理应用程序的配置信息。这些配置文件可以用来设置数据库连接、服务器端口、日志级别等参数。Spring Boot 支持多种格式的配置文件,最常见的是 application.propertiesapplication.yml 以及 application.yaml


1. 配置文件的位置和优先级

Spring Boot 会按照以下顺序加载配置文件(优先级从高到低):

  1. 项目根目录下的 config 文件夹/config/application.properties/config/application.yml/config/application.yaml
  2. 项目根目录/application.properties/application.yml/application.yaml
  3. 类路径下的 config 文件夹classpath:/config/application.propertiesclasspath:/config/application.ymlclasspath:/config/application.yaml
  4. 类路径根目录classpath:/application.propertiesclasspath:/application.ymlclasspath:/application.yaml

高优先级的配置会覆盖低优先级的配置。

同目录下的文件优先级如下:

application.properties > application.yml > application.yaml


2. 配置文件的格式

2.1 application.properties

这是传统的 .properties 格式,键值对形式:

properties
# 设置服务器端口 server.port=8080 # 数据库连接配置 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 日志级别配置 logging.level.org.springframework=DEBUG logging.level.com.example=INFO # 自定义属性 app.name=MyApp app.version=1.0.0

2.2 application.yml 和 application.yaml

这是 YAML 格式的配置文件,支持层级结构,更简洁易读:

yaml
# 设置服务器端口 server: port: 8080 # 数据库连接配置 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # 日志级别配置 logging: level: org.springframework: DEBUG com.example: INFO # 自定义属性 app: name: MyApp version: 1.0.0

3. 常用配置项

3.1 服务器相关

  • 端口号
    properties
    server.port=8080
  • 上下文路径
    properties
    server.servlet.context-path=/myapp

3.2 数据源相关

  • 数据库连接
    properties
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 连接池配置(HikariCP 默认)
    properties
    spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5

3.3 日志相关

  • 日志级别
    properties
    logging.level.root=WARN logging.level.org.springframework=DEBUG logging.level.com.example=INFO
  • 日志文件路径
    properties
    logging.file.name=logs/app.log logging.file.path=/var/logs/

3.4 Spring Boot Actuator

  • 启用 Actuator 端点
    properties
    management.endpoints.web.exposure.include=* management.endpoint.health.show-details=always

3.5 Thymeleaf 模板引擎

  • 模板缓存
    properties
    spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html

3.6 自定义属性

你可以在配置文件中定义自己的属性,并通过 @Value@ConfigurationProperties 注解注入到代码中。

properties
app.name=MyApp app.version=1.0.0

在代码中使用:

java
@Value("${app.name}") private String appName; @Value("${app.version}") private String appVersion;

或者使用 @ConfigurationProperties

java
@Component @ConfigurationProperties(prefix = "app") public class AppConfig { private String name; private String version; // getters and setters... }

4. 多环境配置

Spring Boot 支持多环境配置,可以通过 application-{profile}.propertiesapplication-{profile}.yml 文件来区分不同环境的配置。例如:

  • application-dev.properties:开发环境
  • application-prod.properties:生产环境

激活某个环境的配置:

properties
spring.profiles.active=dev

或者在运行时通过命令行参数指定:

bash
java -jar myapp.jar --spring.profiles.active=prod

5. 配置文件加密

如果需要保护敏感信息(如数据库密码),可以使用工具(如 Jasypt)对配置文件中的值进行加密。

示例:

properties
spring.datasource.password=ENC(加密后的字符串)

然后在启动时提供解密密钥:

bash
java -Djasypt.encryptor.password=mySecretKey -jar myapp.jar

6. 自定义配置文件

如果你不想使用默认的 application.propertiesapplication.yml,可以通过以下方式指定自定义配置文件:

方法一:通过命令行参数

bash
java -jar myapp.jar --spring.config.location=classpath:/custom-config.properties

方法二:通过代码指定

在主类中通过 SpringApplication.setDefaultProperties() 设置:

java
@SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication app = new SpringApplication(MyApp.class); Properties props = new Properties(); props.setProperty("spring.config.location", "classpath:/custom-config.properties"); app.setDefaultProperties(props); app.run(args); } }