springboot取yml中的值_@Value拜拜:更优雅的获取springboot yml中的值
偶然看到國外論壇有人在吐槽同事從配置文件獲取值的方式,因此查閱了相關資料發現確實有更便于管理更優雅的獲取方式。
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 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上手測試哦,地址在文首。本文原創,轉載請附上原文鏈接,不然我會生氣的。有幫助的話點個贊吧,筆芯。
總結
以上是生活随笔為你收集整理的springboot取yml中的值_@Value拜拜:更优雅的获取springboot yml中的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《魂斗罗》三十年全系列正统作品赏析
- 下一篇: DotNetty 学习