springboot获取properties属性
一、使用 @ConfigurationProperties 注解,在 application.yml 配置文件中添加配置项:
env101:
var1: var1
var2: var2
创建一个 MyConf 类用于承载所有前缀为env101的配置属性。
@Data
@Configuration
@ConfigurationProperties(prefix = "env101")
public class MyConf {
private String var1;
private String var2;
}
在需要使用var1、var2属性值的地方,将 MyConf 对象注入到依赖对象中即可。
@Slf4j
@SpringBootTest
public class ConfTest {
@Resource
private MyConf myConf;
@Test
public void myConfTest() {
log.info("@ConfigurationProperties注解 配置获取 {}", JSON.toJSONString(myConf));
}
}
二、常量(final)赋值
@Value 注解加到final
关键字上同样也无法获取属性值,因为 final 变量必须在构造方法中进行初始化,并且一旦被赋值便不能再次更改。而 @Value 注解是在 bean 实例化之后才进行属性注入的,因此无法在构造方法中初始化 final 变量。
@Slf4j
@SpringBootTest
public class EnvVariables2Test {
private final String var6;
@Autowired
EnvVariables2Test( @Value("${env101.var6}") String var6) {
this.var6 = var6;
}
/**
* @value注解 final 获取
*/
@Test
public void var1Test() {
log.info("final 注入: {}", var6);
}
}
三、@Value 注解(听说有漏洞)
@Value注解是Spring
框架提供的用于注入配置属性值的注解,它可用于类的成员变量
、方法参数
和构造函数
参数上, 这个记住很重要!
在应用程序启动时,使用 @Value 注解的 Bean 会被实例化。所有使用了 @Value 注解的 Bean 会被加入到PropertySourcesPlaceholderConfigurer
的后置处理器集合中。
当后置处理器开始执行时,它会读取 Bean 中所有 @Value 注解所标注的值,并通过反射将解析后的属性值赋值给标有 @Value 注解的成员变量、方法参数和构造函数参数。
需要注意,在使用 @Value 注解时需要确保注入的属性值已经加载到 Spring 容器中,否则会导致注入失败。
如何使用
在src/main/resources
目录下的application.yml
配置文件中添加env101.var1
属性。
env101:
var1: var1
只要在变量上加注解@Value("${env101.var1}")
就可以了,@Value 注解会自动将配置文件中的env101.var1
属性值注入到var1
字段中,跑个单元测试看一下结果。
@Slf4j @SpringBootTest
public class EnvVariablesTest {
@Value("${env101.var1}")
private String var1;
@Test
public void var1Test(){
log.info("配置文件属性: {}",var1);
}
}
四、自定义读取
如果上边的几种读取配置的方式你都不喜欢,就想自己写个更流批的轮子,那也很好办。我们直接注入PropertySources获取所有属性的配置队列,你是想用注解实现还是其他什么方式,就可以为所欲为了。
@Slf4j
@SpringBootTest
public class CustomTest {
@Autowired
private PropertySources propertySources;
@Test
public void customTest() {
for (PropertySource<?> propertySource : propertySources) {
log.info("自定义获取 配置获取 name {} ,{}", propertySource.getName(), propertySource.getSource());
}
}
}
2、本站文章部分来源注册用户发布或互联网收集而来,若有侵权,请邮件联系作者。
邮箱地址:wtao219@qq.com