Spring Boot中的配置文件使用以及重新加载

Spring Boot中的配置文件使用以及重新加载

概要

本教程将展示如何通过Java configuration和@PropertySource或XML和property-placeholder在Spring中设置和使用属性

通过Java Annotations注册配置文件

Spring 3.1起引入了新的@PropertySource注释,作为向环境中添加属性源的方便机制。
该注释将与基于java的配置和@Configuration注释一起使用:

@Configuration
@PropertySource("classpath:foo.properties")
public class PropertiesWithJavaConfig {
    //...
}

另一种非常有用的注册新属性文件的方法是使用占位符,它允许在运行时动态选择正确的文件:

@PropertySource({ 
  "classpath:persistence-${envTarget:mysql}.properties"
})

${envTarget:mysql} , envTarget:环境变量名称 , mysql:默认值

定义多个属性文件

在Java 8中@PropertySource注释是可重复的。因此,我们可以使用这个注释来定义多个属性位置:


@PropertySource("classpath:foo.properties")
@PropertySource("classpath:bar.properties")
public class PropertiesWithJavaConfig {
    //...
}

当然也可以使用数组的形式:

@PropertySources({
    @PropertySource("classpath:foo.properties"),
    @PropertySource("classpath:bar.properties")
})
public class PropertiesWithJavaConfig {
    //...
}

注入属性值

  • 用@Value注释注入属性很简单
@Value( "${jdbc.url}" )
private String jdbcUrl;

  • 在注入的时候使用默认值
@Value( "${jdbc.url:aDefaultUrl}" )
private String jdbcUrl;

  • 使用Environment API获取属性值
@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("jdbc.url"));

@Value使用

@Value注解可用于将值注入spring管理bean中的字段,并且可以应用于字段或构造函数/方法参数级别。

  • 注入硬编码值到字段中(没有任何意义)
@Value("string value")
private String stringValue;
  • 使用@PropertySource注释允许我们使用@Value注释处理来自属性文件的值。在下面的例子中,我们从分配给字段的文件中获取值:
@Value("${value.from.file}")
private String valueFromFile;

  • 我们也可以用相同的语法从系统属性中设置值,假设我们已经定义了一个系统属性systemValue:
@Value("${systemValue}")
private String systemValue;
  • 可以为未定义的属性提供默认值。一些默认值将被注入:
@Value("${unknown.param:some default}")
private String someDefault;

如果将相同的属性定义为系统属性以及属性文件中,则将优先应用系统属性,系统属性 > 配置文件属性

  • 数组属性设置
listOfValues = A,B,C
@Value("${listOfValues}")
private String[] valuesArray;

  • map 属性设置

我们还可以使用@Value注释来注入一个Map属性。首先,我们需要在属性文件的{key: ’ value’}中定义属性:

valuesMap={key1: '1', key2: '2', key3: '3'}
@Value("#{${valuesMap}}")
private Map<String, Integer> valuesMap;
  • 如果我们需要在映射中获取特定键的值,我们所要做的就是在表达式中添加键的名称:
@Value("#{${valuesMap}.key1}")
private Integer valuesMapKey1;
  • 安全的使用表达式
@Value("#{${valuesMap}['unknownKey']}")
private Integer unknownMapKey;
  • 为map设定默认值
@Value("#{${unknownMap : {key1: '1', key2: '2'}}}")
private Map<String, Integer> unknownMap;
 
@Value("#{${valuesMap}['unknownKey'] ?: 5}")
private Integer unknownMapKeyWithDefaultValue;

  • 使用@Value注入所有的系统变量
@Value("#{systemProperties}")
private Map<String, String> systemPropertiesMap;

  • 使用SpEL设置属性
@Component
@PropertySource("classpath:values.properties")
public class CollectionProvider {
 
    private List<String> values = new ArrayList<>();
 
    @Autowired
    public void setValues(@Value("#{'${listOfValues}'.split(',')}") List<String> values) {
        this.values.addAll(values);
    }
 
    // standard getter
}

Spring Boot 中配置属性

在Spring Boot工程目录src/main/resources中的application.properties会被自动加载,无需额外配置就可以使用

  • 1、在运行的时候指定配置文件
java -jar app.jar --spring.config.location=classpath:/another-l
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值