文章目录
- 1. @Value 注解读取单个属性
- 2. 使用 @ConfigurationProperties 注解
- 3. 通过 Environment 对象读取属性
- 4. 使用 @PropertySource 注解加载额外的配置文件
在 Spring Boot 中,application.yml
文件用于配置应用程序的属性,Spring Boot 默认会从 src/main/resources
目录下的 application.properties
或 application.yml
文件中读取配置。读取 application.yml
文件中的配置可以通过以下几种常用的方法进行:
@Value
: 适合读取简单的单一属性。@ConfigurationProperties
: 适合读取复杂的配置集。Environment
: 适合在运行时动态访问配置。@PropertySource
: 加载.properties
文件。
1. @Value 注解读取单个属性
@Value
注解用于读取单一简单的配置属性,该注解可以直接应用于字段、构造函数或方法参数上,不要求提供 Setter
方法。
-
在
application.yml
配置文件中添加如下配置:app: name: MyApp keys: - key1 - key2
-
使用
@Value
注解从配置文件中读取单个属性值:-
字段注入:将
@Value
注解应用于字段,Spring 将直接将配置值注入到字段中。@Component public class MyComponent { @Value("${app.name}") private String name; }
-
构造函数注入:
@Value
也可以用于构造函数参数。@Component public class MyComponent { private final String name; public MyComponent(@Value("${app.name}") String name) { this.name = name; } }
-
方法参数注入:
@Value
注解用于方法参数。@Component public class MyComponent { private String name; @Value("${app.name}") public void setKeys(String name) { this.name = name; } }
-
2. 使用 @ConfigurationProperties 注解
@ConfigurationProperties
用于将配置文件中的属性绑定到 Java 对象中。适合处理结构化的配置,比如嵌套的属性或复杂的属性集合。
-
在
application.yml
配置文件中添加如下配置:app: name: MyApp keys: - key1 - key2
-
在类上使用
@ConfigurationProperties
注解,并指定前缀,该类会直接映射配置文件中的属性名一致属性:@Component @ConfigurationProperties(prefix = "app") public class AppProperties { private List<String> keys; }
3. 通过 Environment 对象读取属性
Environment
是 Spring 中用于管理和访问配置属性、配置文件和环境变量的一个抽象接口,该对象提供了一种管理和访问配置属性、激活的配置文件和环境变量的统一方式。我们可以在任何 Spring 管理的 bean 中通过注入 Environment
对象来获取配置属性。
-
在
application.yml
配置文件中添加如下配置:app: name: MyApp keys: - key1 - key2
-
在类中注入
Environment
对象,使用env.getProperty(String key)
来检索属性的值。@Component public class MyComponent { @Autowired private Environment env; public void printConfig() { String port = env.getProperty("server.port"); System.out.println("Server Port: " + port); } }
4. 使用 @PropertySource 注解加载额外的配置文件
@PropertySource
注解是 Spring Framework 提供的一个注解,用于加载额外 .properties
配置文件或其他资源文件中的属性到 Spring 的 Environment
中。
-
在
src/main/resources
目录下创建config.properties
的属性文件:app.name=MyApp app.version=1.0.0
-
在配置类上使用
@PropertySource
注解来加载配置文件:@Configuration @PropertySource("classpath:config.properties") //@PropertySource({"classpath:config.properties", "classpath:another-config.properties"}) public class AppConfig { }
-
使用
@Value
注解或Environment
对象获取属性:import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class MyComponent { @Value("${app.name}") private String appName; @Autowired private Environment env; public void printAppInfo() { System.out.println("App Name: " + appName); String appVersion = env.getProperty("app.version"); System.out.println("App Version: " + appVersion); } }