前言
灌南網站制作公司哪家好,找創新互聯建站!從網頁設計、網站建設、微信開發、APP開發、響應式網站等網站項目制作,到程序開發,運營維護。創新互聯建站從2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯建站。
偶然看到國外論壇有人在吐槽同事從配置文件獲取值的方式,因此查閱了相關資料發現確實有更便于管理更優雅的獲取方式。
github demo地址: springboot-yml-value
1.什么是yml文件
application.yml取代application.properties,用來配置數據可讀性更強,尤其是當我們已經制定了很多的層次結構配置的時候。
下面是一個非常基本的yml文件:
server: url: http://localhost myapp: name: MyApplication threadCount: 4 ...
等同于以下的application.properties文件:
server.url=http://localhost server.myapp.name=MyApplication server.myapp.threadCount=4 ...
demo中的yml文件如下:
server: url: http://myapp.org app: name: MyApplication threadCount: 10 users: - Jacob - James
2.yml屬性獲取配置
訪問yml屬性的一種方法是使用@Value("$ {property}")注釋,但是隨著配置樹形結構以及數量的增加,代碼可讀性也隨之降低,更不利于bean的管理。筆者發現另一種優雅的方法可以確保強類型bean的管理以及更方便的驗證我們的程序配置。
為了實現這一點,我們將創建一個@ConfigurationProperties類ServerProperties,它映射一組相關的屬性:
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.ArrayList; import java.util.List; /** * @program: simple-demo * @description: 映射屬性 (server節點) * @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 } }
請注意,我們可以創建一個或多個@ConfigurationProperties類。
定義我們的springboot 注冊配置類ApplicationConfig:
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; /** * @program: simple-demo * @description: 注冊所有映射屬性類 { }中用逗號分隔即可注冊多個屬性類 * @author: CaoTing * @date: 2019/6/3 **/ @Configuration @EnableConfigurationProperties({ServerProperties.class}) public class ApplicationConfig { }
這里已經提到了要在@EnableConfigurationProperties中注冊的屬性類列表。
3.訪問yml屬性
現在可以通過使用創建的@ConfigurationProperties bean來訪問yml屬性。可以像任何常規的Spring bean一樣注入這些屬性bean,測試類如下:
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: 單元測試類 * @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()); } }
測試結果如下:
4.總結
歡迎移步github上手測試哦,地址在文首。有幫助的話點個贊吧,筆芯。轉載需附上原文鏈接。
5.補充
因為有小伙伴不太清楚具體用途。筆者補充一下兩者的優缺點吧。
Spring Boot通過ConfigurationProperties注解從配置文件中獲取屬性。從上面的例子可以看出ConfigurationProperties注解可以通過設置prefix指定需要批量導入的數據。支持獲取字面值,集合,Map,對象等復雜數據。ConfigurationProperties注解還有其他特點呢?它和Spring的Value注解又有什么區別呢?
一)ConfigurationProperties和@Value優缺點
ConfigurationProperties注解的優缺點
一、可以從配置文件中批量注入屬性;
二、支持獲取復雜的數據類型;
三、對屬性名匹配的要求較低,比如user-name,user_name,userName,USER_NAME都可以取值;
四、支持JAVA的JSR303數據校驗;
五、缺點是不支持SpEL表達式;
六、確保強類型bean的管理,更方便的驗證程序配置;
Value注解的優缺點正好相反,它只能一個個配置注入值;不支持數組、集合等復雜的數據類型;不支持數據校驗;對屬性名匹配有嚴格的要求。最大的特點是支持SpEL表達式,使其擁有更豐富的功能。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創新互聯的支持。
分享標題:如何更優雅地獲取springbootyml中的值
文章地址:http://vcdvsql.cn/article30/gjiipo.html
成都網站建設公司_創新互聯,為您提供服務器托管、靜態網站、ChatGPT、外貿網站建設、網站收錄、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯