spring中的配置文件
# spering中的配置文件
Spring 项目中,配置文件用于定义应用程序的参数、行为和设置。配置文件可以用 YAML 或属性文件格式表示,且加载顺序各有不同。下面是 Spring 项目中常见的配置文件、它们的加载顺序,以及每个文件的作用和使用场景。
# 配置文件的种类
bootstrap.yml
/bootstrap.properties
application.yml
/application.properties
application-{profile}.yml
/application-{profile}.properties
@PropertySource
applicationContext.xml
/beans.xml
@Value
和@ConfigurationProperties
# 适用场景
- 启动配置:使用
bootstrap.yml
定义启动时的初始配置,一般为springcloud默认配置文件。 - 核心配置:使用
application.yml
定义应用的主要参数,一般为springboot默认配置文件。 - 按环境配置:使用
application-{profile}.yml
定义不同环境的配置。 - 自定义配置:使用
@PropertySource
加载特定的自定义配置。
# 配置文件的加载顺序
bootstrap.yml
/bootstrap.properties
:最先加载。用于配置启动时的初始设置。application.yml
/application.properties
:次级加载。定义应用的核心配置。application-{profile}.yml
/application-{profile}.properties
:按环境加载。用于配置不同环境的参数。
# 配置文件的作用和使用场景
bootstrap.yml
/bootstrap.properties
- 作用:这个文件通常用于 Spring Cloud Config 应用,它在应用程序启动时首先加载,用于配置 Spring Cloud Config 服务的连接、认证;配置应用启动时的初始参数,如服务发现、配置中心、消息总线等。Spring Cloud Config 适用于集中式配置管理,尤其是在微服务架构中。它允许多个应用共享同一个配置源,并且可以动态更新配置
- 使用场景:用于配置启动时需要的特定设置,通常涉及外部配置和服务注册。通常用于 Spring Cloud Config,配置与配置服务器相关的内容
# 配置中心 spring: cloud: config: uri: http://config-server:8888 name: my-app profile: dev label: main # 服务发现 eureka: client: serviceUrl: defaultZone: http://eureka-server:8761/eureka
1
2
3
4
5
6
7
8
9
10
11
12
13
14从Spring Boot 2.4.0开始,配置文件加载的方式有所改变,
bootstrap.yml
文件已经不再默认被加载,取而代之的是application.yml
。但是,如果你依然想要使用bootstrap.yml
,你需要引入 Spring Cloud Config 的依赖。如果你没有使用Spring Cloud Config,并且只是想在本地使用
bootstrap.yml
文件,你需要做的是:- 确保
bootstrap.yml
有正确的配置内容。 - 添加 Spring Cloud 的相关依赖到你的
pom.xml
中,因为bootstrap.yml
是由 Spring Cloud Context 来加载的。
例如,添加以下依赖到你的
pom.xml
文件中:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
1
2
3
4这个依赖项将允许你的Spring Boot应用在没有激活Spring Cloud Config Server的情况下读取
bootstrap.yml
文件。然而,如果你的意图只是要使用一个简单的Spring Boot项目并使用
application.yml
作为主配置文件(这是Spring Boot默认的做法),你可以将bootstrap.yml
的内容转移到application.yml
文件中,并确保没有包含任何Spring Cloud特定的配置,如spring.cloud.config.enabled
。这样,Spring Boot将会加载application.yml
中的配置,并且你不需要额外的配置服务。application.yml
/application.properties
- 作用:Spring Boot 应用的默认配置文件,定义应用的核心配置,包括数据源、端口、日志级别、组件设置等。
- 使用场景:用于配置应用程序的通用设置和行为,适用于所有环境。
# 应用程序名称 spring: application: name: my-app # 服务器端口 server: port: 8080 # 日志级别 logging: level: root: INFO com.example: DEBUG # 数据源配置 datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: secret
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20application-{profile}.yml
/application-{profile}.properties
- 作用:根据不同的环境配置参数,支持多环境配置。
- 使用场景:用于区分开发、测试、生产等环境,并提供不同的配置。
# 开发环境的配置 spring: profiles: development # 数据源配置 datasource: url: jdbc:mysql://localhost:3306/devdb username: dev_user password: dev_secret
1
2
3
4
5
6
7
8
9# 生产环境的配置 spring: profiles: production # 数据源配置 datasource: url: jdbc:mysql://prod-db-server:3306/proddb username: prod_user password: prod_secret
1
2
3
4
5
6
7
8
9
10@PropertySource
- 作用:加载自定义配置文件,适用于特定类或模块。
- 使用场景:在 Spring Configuration 类上指定配置文件路径,加载额外的设置。
import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Configuration; @Configuration @PropertySource("classpath:custom-config.properties") public class CustomConfig { // 自定义配置的使用 }
1
2
3
4
5
6
7
8applicationContext.xml
/beans.xml
- 作用:配置 Spring 的 Bean 和组件,用于传统的 XML 配置方式。
- 使用场景:用于基于 XML 的 Spring 项目,定义 Bean 的依赖和生命周期。
<!-- applicationContext.xml --> <beans> <bean id="myBean" class="com.example.MyClass"> <property name="myProperty" value="myValue" /> </bean> </beans>
1
2
3
4
5
6
7@Value
和@ConfigurationProperties
- 作用:用于从配置文件中读取值,或将整个配置文件映射到一个对象中。
- 使用场景:
@Value
用于读取单个值,@ConfigurationProperties
用于将配置文件映射到 Java 对象。
import org.springframework.beans.factory.annotation.Value; public class MyComponent { @Value("${my.property}") private String myProperty; public void printProperty() { System.out.println("Property value: " + myProperty); } }
1
2
3
4
5
6
7
8
9
10import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "my") public class MyProperties { private String property; // Getters and setters }
1
2
3
4
5
6
7
8
# 其他注意事项
- 使用 Spring Boot 时,配置文件主要以
application.yml
或application.properties
为主。 - 如果使用
application-{profile}.yml
,需要通过spring.profiles.active
指定当前激活的环境。 - 在复杂的 Spring 项目中,配置文件的加载顺序至关重要,需要确保正确的优先级和覆盖关系。