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());
        }
    }
}
1、所有文章未经授权禁止转载、摘编、复制或建立镜像,如有违反,追究法律责任。
2、本站文章部分来源注册用户发布或互联网收集而来,若有侵权,请邮件联系作者。
邮箱地址:wtao219@qq.com
THE END
分享
二维码
< <上一篇
下一篇>>