您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何獲取springbootyml中的值,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
1.什么是yml文件
application.yml取代application.properties,用來(lái)配置數(shù)據(jù)可讀性更強(qiáng),尤其是當(dāng)我們已經(jīng)制定了很多的層次結(jié)構(gòu)配置的時(shí)候。
下面是一個(gè)非?;镜膟ml文件:
server: url: http://localhost myapp: name: MyApplication threadCount: 4...
等同于以下的application.properties文件:
server.url=http://localhostserver.myapp.name=MyApplicationserver.myapp.threadCount=4...
demo中的yml文件如下:
server: url: http://myapp.org app: name: MyApplication threadCount: 10 users: - Jacob - James
2.yml屬性獲取配置
訪問(wèn)yml屬性的一種方法是使用@Value("$ {property}")注釋,但是隨著配置樹(shù)形結(jié)構(gòu)以及數(shù)量的增加,代碼可讀性也隨之降低,更不利于bean的管理。筆者發(fā)現(xiàn)另一種優(yōu)雅的方法可以確保強(qiáng)類(lèi)型bean的管理以及更方便的驗(yàn)證我們的程序配置。
為了實(shí)現(xiàn)這一點(diǎn),我們將創(chuàng)建一個(gè)@ConfigurationProperties類(lèi)ServerProperties,它映射一組相關(guān)的屬性:
import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import java.util.ArrayList;import java.util.List;/** * @program: simple-demo * @description: 映射屬性 (server節(jié)點(diǎn)) * @author: CaoTing * @date: 2019/6/3 **/@Data@ConfigurationProperties("server")public class ServerProperties { private String url; private final App app = new App(); public App getApp() { return app; } public static class App { private String name; private String threadCount; private List<String> users = new ArrayList<>(); // TODO getter and setter } }
請(qǐng)注意,我們可以創(chuàng)建一個(gè)或多個(gè)@ConfigurationProperties類(lèi)。
定義我們的springboot 注冊(cè)配置類(lèi)ApplicationConfig:
import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Configuration;/** * @program: simple-demo * @description: 注冊(cè)所有映射屬性類(lèi) { }中用逗號(hào)分隔即可注冊(cè)多個(gè)屬性類(lèi) * @author: CaoTing * @date: 2019/6/3 **/@Configuration@EnableConfigurationProperties({ServerProperties.class})public class ApplicationConfig {}
這里已經(jīng)提到了要在@EnableConfigurationProperties中注冊(cè)的屬性類(lèi)列表。
3.訪問(wèn)yml屬性
現(xiàn)在可以通過(guò)使用創(chuàng)建的@ConfigurationProperties bean來(lái)訪問(wèn)yml屬性??梢韵袢魏纬R?guī)的Spring bean一樣注入這些屬性bean,測(cè)試類(lèi)如下:
import com.caotinging.ymldemo.application.YmlValueApplication;import com.caotinging.ymldemo.config.ServerProperties;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/** * @program: simple-demo * @description: 單元測(cè)試類(lèi) * @author: CaoTing * @date: 2019/6/3 **/@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = YmlValueApplication.class)public class AppYmlValueTest { @Autowired private ServerProperties config; @Test public void printConfigs() { System.out.println(this.config.getUrl()); System.out.println(this.config.getApp().getName()); System.out.println(this.config.getApp().getThreadCount()); System.out.println(this.config.getApp().getUsers()); }}
測(cè)試結(jié)果如下:
4.總結(jié)
歡迎移步github上手測(cè)試哦,地址在文首。有幫助的話點(diǎn)個(gè)贊吧,筆芯。轉(zhuǎn)載需附上原文鏈接。
5.補(bǔ)充
因?yàn)橛行』锇椴惶宄唧w用途。筆者補(bǔ)充一下兩者的優(yōu)缺點(diǎn)吧。
Spring Boot通過(guò)ConfigurationProperties注解從配置文件中獲取屬性。從上面的例子可以看出ConfigurationProperties注解可以通過(guò)設(shè)置prefix指定需要批量導(dǎo)入的數(shù)據(jù)。支持獲取字面值,集合,Map,對(duì)象等復(fù)雜數(shù)據(jù)。ConfigurationProperties注解還有其他特點(diǎn)呢?它和Spring的Value注解又有什么區(qū)別呢?
一)ConfigurationProperties和@Value優(yōu)缺點(diǎn)
ConfigurationProperties注解的優(yōu)缺點(diǎn)
一、可以從配置文件中批量注入屬性;
二、支持獲取復(fù)雜的數(shù)據(jù)類(lèi)型;
三、對(duì)屬性名匹配的要求較低,比如user-name,user_name,userName,USER_NAME都可以取值;
四、支持JAVA的JSR303數(shù)據(jù)校驗(yàn);
五、缺點(diǎn)是不支持SpEL表達(dá)式;
六、確保強(qiáng)類(lèi)型bean的管理,更方便的驗(yàn)證程序配置;
Value注解的優(yōu)缺點(diǎn)正好相反,它只能一個(gè)個(gè)配置注入值;不支持?jǐn)?shù)組、集合等復(fù)雜的數(shù)據(jù)類(lèi)型;不支持?jǐn)?shù)據(jù)校驗(yàn);對(duì)屬性名匹配有嚴(yán)格的要求。最大的特點(diǎn)是支持SpEL表達(dá)式,使其擁有更豐富的功能。
關(guān)于如何獲取springbootyml中的值就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。