更新于 

配置文件读取

Spring Boot读取配置文件常用方式

@Value方式获取

1
2
3
4
5
6
7
//org.springframework.beans.factory.annotation.Value
@Value(${配置项key:默认值})
private String configValue;

//for example
@Value("${value.request.timeout:20}")
private int timeOut;

Environment对象获取

1
2
3
4
5
6
7
//org.springframework.core.env.Environment
@Autowired
private Environment environment;


//for example
environment.getProperty("value.request.timeout")

@ConfigurationProperties方式获取

在application.yml中:

1
2
3
4
5
settings:
name: ove
curl:
ConnectionTimeOut: 30
OperationTimeOut: 60

则对应的配置类为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(value = "settings")
public class SettingProperties {

private String name;

private Curl curl;

@Data
public static class Curl {
private int ConnectionTimeOut;
private int OperationTimeOut;
}
}
注意事项
  • @ConfigurationProperties(value = “settings”) 表示配置文件里属性的前缀是 settings
  • 配置类上记得加上 @Data 和 @Component 注解(或者在启动类上加上 @EnableConfigurationProperties(value = AppProperties.class) )
  • 如果有内部类对象,记得加上 @Data ,不然无法映射数据

使用方法:

1
2
@Autowired
private SettingProperties settingProperties;

@PropertySource方式获取

有时候我们会有一些特殊意义的配置,会 单独 用一个配置文件存储,比如数据库配置连接参数(在application.yml同级目录新建一个配置文件)

则对应的配置类为:

1
2
3
4
5
6
7
8
9
10
@Data
@Component
@ConfigurationProperties(value = "others")
@PropertySource(value = "classpath:others.properties", encoding = "UTF-8", ignoreResourceNotFound = true)
public class OtherSettingProperties {

private String userName;

private String userAge;
}
注意事项
  • @ConfigurationProperties(value = “others”) 表示配置文件里属性的前缀是 others
  • @PropertySource 中 value 属性表示指定配置文件的路径,encoding 属性表示指定的是读取配置文件时的编码,记得和文件 alian.properties 的编码保持一致,ignoreResourceNotFound 属性值为true时没找到指定配置文件的时候不报错
  • 配置类上记得加上 @Component 注解
  • .yml 格式不支持 @PlaceSource 注解导入配置

使用方法:

1
2
@Autowired
private OtherSettingProperties otherSettingProperties;