關(guān)于springboot中的自定義配置項(xiàng)
自定義配置項(xiàng)
在項(xiàng)目開發(fā)的過程中,經(jīng)常需要自定義系統(tǒng)業(yè)務(wù)方面的配置文件及配置項(xiàng),Spring Boot提供了@value注解、@ConfigurationProperties注解和Environment接口等3種方式自定義配置項(xiàng)。
@value
在實(shí)際項(xiàng)目中,經(jīng)常需要在配置文件中定義一些簡單的配置項(xiàng),Spring Boot提供@Value注解來設(shè)置簡單的配置項(xiàng),默認(rèn)讀取application.properties文件中的配置屬性。
我們?cè)?code>application.properties配置文件下自定義配置屬性。
然后在使用的位置調(diào)用@Value注解來獲取配置項(xiàng)的值,如下所示:
@Value("${com.jingt.name.firstName}") private String firstName; @Value("${com.jingt.name.secondName}") private String secondName; public String testValue(){ return firstName + "|" + secondName; }
@Autowired private HelloServices helloServices; @Test void testValue() { System.out.println(helloServices.testValue()); }
注意:
- 使用@Value注解時(shí),所在類必須被Spring容器管理,也就是使用
@Component
、@Controller
、@Service
等注解定義的類。 @Value
需要傳入完整的配置項(xiàng)的Key值。@Value
注解默認(rèn)讀取application配置文件,如果需要使用其他的配置文件,可以通過@PropertySource
注解指定對(duì)應(yīng)的配置文件。
在啟動(dòng)類上加注解@PropertySource
@SpringBootApplication @PropertySource(value = {"classpath:application_test.properties"}) public class HelloworldApplication { public static void main(String[] args) { SpringApplication.run(HelloworldApplication.class, args); } }
在application_test.properties 配置文件中加入
com.jingt.name.firstName=guo1 com.jingt.name.thirdName=jingt1
@Value("${com.jingt.name.firstName}") private String firstName; @Value("${com.jingt.name.thirdName}") private String secondName; public String testValue(){ return firstName + "|" + secondName; }
把secondName改為thirdName,firstName從guo改為guo1
會(huì)發(fā)現(xiàn)thirdName也已經(jīng)獲取到了,firstName還是為guo,這是因?yàn)閍pplication.properties配置文件加載的優(yōu)先級(jí)的原因,application.properties會(huì)覆蓋application_test.properties對(duì)應(yīng)文件中的值。
Environment接口
Environment是Spring為運(yùn)行環(huán)境提供的高度抽象的接口,它會(huì)自動(dòng)獲取系統(tǒng)加載的全部配置項(xiàng),包括命令行參數(shù),系統(tǒng)屬性,系統(tǒng)環(huán)境,隨機(jī)數(shù),配置文件等。使用時(shí)無須其他的額外配置,只要在使用的類中注入Environment即可。
在application.properties文件中增加自定義配置項(xiàng)
com.jingt.name.firstName=guo com.jingt.name.secondName=jingt
Environment讀取的是系統(tǒng)中所有的配置。我們既可以在application.properties中設(shè)置自定義的配置項(xiàng),又可以在自定義配置文件中添加配置項(xiàng)。
將Environment
對(duì)象注入,獲取系統(tǒng)配置
@Autowired private Environment env; @Test void getEnv(){ System.out.println(env.getProperty("com.jingt.name.firstName")); System.out.println(env.getProperty("com.jingt.name.secondName")); }
引入的是import org.springframework.core.env.Environment;
,不要引入錯(cuò)了。
使用Environment時(shí)還需要注意以下兩點(diǎn):
使用Environment無須指定配置文件,其獲取的是系統(tǒng)加載的全部配置文件中的配置項(xiàng)。需要注意配置文件的編碼格式,默認(rèn)為ISO8859-1。
@ConfigurationProperties
在實(shí)際項(xiàng)目開發(fā)中,需要注入的配置項(xiàng)非常多時(shí),@value和Environment兩種方法就會(huì)比較煩瑣。這時(shí)可以使用注解@ConfigurationProperties將配置項(xiàng)和實(shí)體Bean關(guān)聯(lián)起來,實(shí)現(xiàn)配置項(xiàng)和實(shí)體類字段的關(guān)聯(lián),讀取配置文件數(shù)據(jù)。
在resources下創(chuàng)建自定義的website.properties配置文件,增加配置屬性。
com.jingt.resource.name=jingt com.jingt.resource.website=com.jingt.com com.jingt.resource.language=java
創(chuàng)建一個(gè)配置類
@Configuration @ConfigurationProperties(prefix = "com.jingt.resource") @PropertySource(value = "classpath:website.properties") public class ResourceConfig { private String name; private String website; private String language; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } }
我們使用了@Configuration注解、@ConfigurationProperties和@PropertySource三個(gè)注解來定義WebSiteProperties實(shí)體類:
- @Configuration定義此類為配置類,用于構(gòu)建bean定義并初始化到Spring容器。
- @ConfigurationProperties(prefix = “com.weiz.resource”)綁定配置項(xiàng),其中prefix表示所綁定的配置項(xiàng)名的前綴。
- @PropertySource(value = “classpath:website.properties”)指定讀取的配置文件及其路徑。@PropertySource不支持引入YML文件。
通過上面的WebSiteProperties類即可讀取全部對(duì)應(yīng)的配置項(xiàng)。
在單元測試中,我們測試是否可以通過
@Autowired private ResourceConfig config; @Test void getResourceConfig(){ System.out.println(config.getName()); System.out.println(config.getWebsite()); System.out.println(config.getLanguage()); }
- 使用YML文件時(shí)注意空格和格式縮進(jìn)。
- Properties文件默認(rèn)使用的是ISO8859-1編碼格式,容易出現(xiàn)亂碼問題。如果含有中文,加入spring.http.encoding.charset=UTF-8配置即可。
- Properties配置的優(yōu)先級(jí)高于YML文件。因?yàn)閅ML文件的加載順序先于Properties文件,如果兩個(gè)文件存在相同的配置,后面加載的Properties中的配置會(huì)覆蓋前面YML中的配置。
- @PropertySource注解默認(rèn)只會(huì)加載Properties文件,YML文件不能使用此注解。
- 簡單值推薦使用@Value,復(fù)雜對(duì)象推薦使用@ConfigurationProperties。
- 只有Spring容器中的組件才能使用容器提供的各類方法,所以,配置讀取類需要增加@Component注解才能加入Spring容器中。
到此這篇關(guān)于關(guān)于springboot中的自定義配置項(xiàng)的文章就介紹到這了,更多相關(guān)springboot自定義配置項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jmeter接口測試教程及接口測試流程詳解(全網(wǎng)僅有)
Jmeter是由Apache公司開發(fā)的一個(gè)純Java的開源項(xiàng)目,即可以用于做接口測試也可以用于做性能測試。本文給大家分享jmeter接口測試教程及接口測試流程,感興趣的朋友跟隨小編一起看看吧2021-12-12jdk8的datetime時(shí)間函數(shù)使用示例
這篇文章主要介紹了jdk8的datetime時(shí)間函數(shù)使用示例,需要的朋友可以參考下2014-03-03idea 多模塊項(xiàng)目依賴父工程class找不到問題的方法
這篇文章主要介紹了idea 多模塊項(xiàng)目依賴父工程class找不到問題的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01java導(dǎo)出數(shù)據(jù)庫的全部表到excel
這篇文章主要為大家詳細(xì)介紹了java導(dǎo)出數(shù)據(jù)庫的全部表到excel的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03使用@ControllerAdvice同時(shí)配置過濾多個(gè)包
這篇文章主要介紹了使用@ControllerAdvice同時(shí)配置過濾多個(gè)包的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Jmeter多種定時(shí)器實(shí)現(xiàn)方法解析
這篇文章主要介紹了Jmeter多種定時(shí)器實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09