在 Spring Boot 中,配置文件用于管理应用程序的设置和参数,通常存放在项目的 src/main/resources
目录下。Spring Boot 支持多种类型的配置文件,并通过这些文件来控制应用的行为和环境配置。
1. application.properties
application.properties
是 Spring Boot 默认的配置文件格式之一,它是基于 键值对 的配置方式,简单易用。通过这个文件,你可以配置 Spring Boot 应用程序的各种参数,如数据库连接、端口号、日志级别等。
示例:
# Server port
server.port=8080
# Logging level
logging.level.org.springframework=DEBUG
# Database configuration
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
server.port=8080
设置应用程序的 HTTP 服务端口为8080
。logging.level.org.springframework=DEBUG
设置 Spring 框架的日志级别为DEBUG
。spring.datasource.*
配置数据库连接的 URL、用户名和密码。
2. application.yml / application.yaml
application.yml
(或 application.yaml
)是另一个常见的配置文件格式,YAML 是一种更加结构化、可读性强的格式。在功能上,它与 application.properties
完全相同,可以用来配置相同的内容。
YAML 格式更适合表示层级结构,因此在配置嵌套的属性时更为方便和直观。
示例:
server:
port: 8080
logging:
level:
org.springframework: DEBUG
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
server.port: 8080
设置应用程序的 HTTP 服务端口。logging.level.org.springframework: DEBUG
设置日志级别。spring.datasource.*
配置数据库连接的 URL、用户名和密码。
注意: application.yml
和 application.properties
配置文件可以共存,Spring Boot 会优先加载 application.properties
配置文件。如果两者有冲突,YAML 格式的配置将覆盖 properties
文件中的配置。
3. application-{profile}.properties / application-{profile}.yml
Spring Boot 支持 Profile(环境配置),可以根据不同的运行环境使用不同的配置文件。通过在配置文件名中加入不同的环境标识符(即 Profile),你可以在不同环境中使用不同的配置。
示例:
application-dev.properties
:开发环境的配置文件application-prod.properties
:生产环境的配置文件
当应用启动时,Spring Boot 会根据激活的 Profile 加载对应的配置文件。
配置文件:
application.properties
# 默认配置
spring.datasource.url=jdbc:mysql://localhost:3306/defaultdb
application-dev.properties
# 开发环境配置
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
application-prod.properties
# 生产环境配置
spring.datasource.url=jdbc:mysql://localhost:3306/proddb
激活 Profile
你可以在 application.properties
或 application.yml
中指定激活的 Profile:
在 application.properties
中:
spring.profiles.active=dev
在 application.yml
中:
spring:
profiles:
active: dev
或者在命令行启动时指定:
java -jar myapp.jar --spring.profiles.active=prod
4. bootstrap.properties / bootstrap.yml
bootstrap.properties
和 bootstrap.yml
主要用于 Spring Cloud Config 或在微服务架构中使用的配置。它们通常用于在应用程序启动时加载一些与环境无关的配置,如配置服务器的地址、配置文件的版本等。一般情况下,bootstrap
配置文件会在 application
配置文件之前加载。
示例:
spring.cloud.config.uri=http://localhost:8888
spring.application.name=myapp
在这个例子中,spring.cloud.config.uri
用来指定 Spring Cloud Config 服务的位置。
5. logback-spring.xml
虽然 Spring Boot 默认使用 application.properties
或 application.yml
来配置日志,但你也可以使用 Logback 来更细粒度地控制日志设置。Spring Boot 允许你使用 logback-spring.xml
文件来定义日志配置。logback-spring.xml
是 Logback 的配置文件,并且在 Spring Boot 中,你可以使用 Spring 特定的属性来进行动态配置。
示例:
<configuration>
<property name="LOGS" value="./logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
- 上面的
logback-spring.xml
配置定义了控制台日志的输出格式,并设置了日志级别为INFO
。
6. Custom Properties Files (自定义配置文件)
除了 application.properties
和 application.yml
,Spring Boot 允许你使用自定义配置文件,并通过 @PropertySource
注解来加载它们。例如,你可以创建一个自定义的配置文件 custom.properties
,并在 Spring Boot 应用中加载它。
示例:
创建 custom.properties
文件:
myapp.customProperty=HelloWorld
在 Spring Boot 配置类中加载这个文件:
@Configuration
@PropertySource("classpath:custom.properties")
public class CustomConfig {
@Value("${myapp.customProperty}")
private String customProperty;
@PostConstruct
public void init() {
System.out.println("Custom Property: " + customProperty);
}
}
7. application.properties / YAML 版本控制
Spring Boot 还允许你在配置文件中使用 版本控制 和 配置文件管理,例如可以根据不同的版本使用不同的配置文件。一般而言,你可以通过工具如 Spring Cloud Config
实现这一需求。
总结
Spring Boot 提供了多种类型的配置文件,包括但不限于:
- application.properties:默认的键值对格式配置文件。
- application.yml / application.yaml:YAML 格式的配置文件,结构化、可读性强。
- application-{profile}.properties / application-{profile}.yml:根据不同的环境(Profile)加载不同的配置文件。
- bootstrap.properties / bootstrap.yml:用于 Spring Cloud 配置或微服务架构中,主要在应用启动时加载。
- logback-spring.xml:用于日志配置。
- 自定义配置文件:使用
@PropertySource
加载的自定义配置文件。
通过这些配置文件,Spring Boot 可以灵活地管理应用的各类参数,并根据不同的环境进行调整。