Spring Boot讀取配置檔案的幾種方式
Spring Boot獲取檔案總的來說有三種方式,分別是@Value註解,@ConfigurationProperties註解和Environment介面。這三種註解可以配合著@PropertySource來使用,@PropertySource主要是用來指定具體的配置檔案。
@PropertySource解析
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public
@interface PropertySource {
String name()
default
"";
String[] value();
boolean ignoreResourceNotFound()
default
false;
String encoding()
default
"";
Class<? extends PropertySourceFactory> factory()
default PropertySourceFactory
.
class;
}
- value():指定配置檔案
- encoding():指定編碼,因為properties檔案的編碼預設是ios8859-1,讀取出來是亂碼
- factory():自定義解析檔案型別,因為該註解預設只會載入properties檔案,如果想要指定yml等其他格式的檔案需要自定義實現。
一、@Value註解讀取檔案
新建兩個配置檔案config.properties和configs.properties,分別寫入如下內容:
zhbin.config.web-configs.name=Java旅途
zhbin.config.web-configs.age=
22
zhbin.config.web-configs.name=Java旅途
zhbin.config.web-configs.age=
18
新增一個類用來讀取配置檔案
@Configuration
@PropertySource(value = {
"classpath:config.properties"},encoding=
"gbk")
public
class
GetProperties {
@Value(
"
${zhbin.config.web-configs.name}")
private String name;
@Value(
"
${zhbin.config.web-configs.age}")
private String age;
public String getConfig() {
return name+
"-----"+age;
}
}
如果想要讀取yml檔案,則我們需要重寫DefaultPropertySourceFactory,讓其載入yml檔案,然後在註解
@PropertySource上自定factory。程式碼如下:
public
class
YmlConfigFactory
extends
DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource)
throws IOException {
String sourceName = name !=
null ? name : resource.getResource().getFilename();
if (!resource.getResource().exists()) {
return
new PropertiesPropertySource(sourceName,
new Properties());
}
else
if (sourceName.endsWith(
".yml") || sourceName.endsWith(
".yaml")) {
Properties propertiesFromYaml = loadYml(resource);
return
new PropertiesPropertySource(sourceName, propertiesFromYaml);
}
else {
return
super.createPropertySource(name, resource);
}
}
private Properties
loadYml
(EncodedResource resource)
throws IOException {
YamlPropertiesFactoryBean factory =
new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
}
}
@PropertySource(value = {
"classpath:config.properties"},encoding=
"gbk",factory = YmlConfigFactory
.
class)
二、Environment讀取檔案
配置檔案我們繼續用上面的兩個,定義一個類去讀取配置檔案
@Configuration
@PropertySource(value = {
"classpath:config.properties"},encoding=
"gbk")
public
class
GetProperties {
@Autowired
Environment environment;
public String getEnvConfig(){
String name = environment.getProperty(
"zhbin.config.web-configs.name");
String age = environment.getProperty(
"zhbin.config.web-configs.age");
return name+
"-----"+age;
}
}
三、@ConfigurationProperties讀取配置檔案
@ConfigurationProperties可以將配置檔案直接對映成一個實體類,然後我們可以直接操作實體類來獲取配置檔案相關資料。
新建一個yml檔案,當然properties檔案也沒問題
zhbin:
config:
web-configs:
name: Java旅途
age:
20
新建實體類用來對映該配置
@Component
@ConfigurationProperties(prefix =
"zhbin.config")
@Data
public class StudentYml {
// webConfigs務必與配置檔案相對應,寫為駝峰命名方式
private WebConfigs webConfigs = new WebConfigs();
@Data
public static class WebConfigs {
private String name;
private String age;
}
}
- prefix = "zhbin.config"用來指定配置檔案字首
如果需要獲取list集合,則做以下修改即可。
zhbin:
config:
web-configs:
-
name: Java旅途
age:
20
-
name: Java旅途
2
age:
202
@Component
@ConfigurationProperties(prefix =
"zhbin.config")
@Data
public
class
StudentYml {
private List<WebConfigs> webConfigs =
new ArrayList<>();
@Data
public
static
class
WebConfigs {
private String name;
private String age;
}
}
經驗與坑
- properties檔案預設使用的是iso8859-1,並且不可修改
- yml檔案的載入順序高於properties,但是讀取配置資訊的時候會讀取後載入的
- @PropertySource註解預設只會載入properties檔案
- @PropertySource註解可以與任何一種方式聯合使用
- 簡單值推薦使用@Value,複雜物件推薦使用@ConfigurationProperties
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2703286/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- spring-boot-route(二)讀取配置檔案的幾種方式Springboot
- Spring boot 讀取properties檔案的四種方式Spring Boot
- Spring Boot 入門系列(二十五)讀取配置檔案的幾種方式詳解!Spring Boot
- 精進 Spring Boot 03:Spring Boot 的配置檔案和配置管理,以及用三種方式讀取配置檔案Spring Boot
- php讀取檔案的幾種方式PHP
- Spring Boot 讀取配置內容的三種方式Spring Boot
- [轉]Spring Boot讀取配置檔案常用方式[強烈建議閱讀]Spring Boot
- Spring Boot EL獲取配置檔案中的值的方式Spring Boot
- SpringBoot讀取配置資料的幾種方式Spring Boot
- Spring Boot 2 實戰:常用讀取配置的方式Spring Boot
- PG獲取檔案大小的幾種方式
- python讀取大檔案的幾種方法Python
- Spring - 獲取ApplicationContext的幾種方式SpringAPPContext
- Spring Boot 配置檔案Spring Boot
- Spring Boot中的 6 種API請求引數讀取方式Spring BootAPI
- spring cloud+spring boot 電子商務spring boot獲取配置檔案的屬性CloudSpring Boot
- Spring Boot讀取外部配置檔案失敗,原因絕對出乎你意料Spring Boot
- spring boot(二)配置資訊的讀取Spring Boot
- go–讀取檔案的方式Go
- Spring Boot的配置檔案管理技巧Spring Boot
- 檔案上傳的幾種方式
- Spring Boot中初始化資源的幾種方式Spring Boot
- Spring Boot 專案鑑權的 4 種方式Spring Boot
- spring boot配置檔案相關Spring Boot
- Spring Boot 配置檔案總結Spring Boot
- Spring Boot入門(二):使用Profile實現多環境配置管理&獲取配置檔案值的兩種方式Spring Boot
- Spring Boot啟動後讀取jar包內部檔案Spring BootJAR
- JavaScript~檔案下載的幾種方式JavaScript
- spring boot學習(7)— 配置資訊的獲取方式Spring Boot
- Spring Boot @PropertySource 載入指定配置檔案、@ImportResource 匯入Spring 配置檔案Spring BootImport
- spring-boot-route(一)Controller接收引數的幾種方式SpringbootController
- 你應該知道的幾種Spring boot非同步呼叫方式Spring Boot非同步
- 5種高大上的yml檔案讀取方式,你知道嗎?
- go配置檔案讀取Go
- springboot讀取配置檔案Spring Boot
- viper 讀取配置檔案
- IOC - 讀取配置檔案
- Spring Boot的五種部署方式Spring Boot