php小編西瓜帶你深入探討Java中應用程式yml如何載入物件清單的問題。在Java Spring Boot中,透過合理配置yml文件,可以實現物件清單的加載,並在應用程式中靈活應用。接下來,讓我們一起來掌握這項技巧,提昇在Spring Boot開發中的實用性和效率。
我有這個設定類別:
@configuration @configurationproperties(prefix = "house") public class projectconfig{ private list<housetemplate> templates; // getters and setters }
housetemplate 類別:
public class housetemplate{ private string id; private string description; // getters and setters }
這是我的應用程式-test.yml
house: templates: - id: "colonial" description: "colonial house template" - id: "cottage" description: "cottage house template" - id: "apartment" description: "apartment house template" examplestring: hello
在我的測試類別中,我有以下內容:
@runwith(springrunner.class) @enableconfigurationproperties(value = projectconfig.class) @testpropertysource("classpath:application-test.yml") public class yamlapplicationcontextloadingspec { @value("${examplestring}") string example; @autowired projectconfig projectconfig; @test public void exampleshouldcontainhello(){ assertthat(example).isequaltoignoringcase("hello"); } @test public void appcontextcontainshousetemplates(){ list<housetemplate> housetemplates = projectconfig.gettemplates(); assertthat(housetemplates).isnotnull(); } }
關於 examplestring 的第一個測試通過,而第二個測試沒有通過。為什麼無法將yml對應到housetemplate清單?
編輯
<artifactId>spring-core</artifactId> <version>4.3.6.RELEASE</version> <artifactId>spring-boot</artifactId> <version>1.5.1.RELEASE</version> <artifactId>junit</artifactId> <version>4.12</version>
我知道它們真的很舊,我很想升級,但我不能…這就是我必須處理的。
使用@configurationproperties
從yml讀取後,可以註冊為bean,然後可以透過applicationcontext
取得。
@configuration @configurationproperties(prefix = "house") public class testconfig { private list<housetemplate> templates; @bean public list<housetemplate> templates() { return templates; } // getter and setter } @restcontroller @requestmapping("/api/test") public class testcontroller { @autowired private applicationcontext applicationcontext; @getmapping("get") @suppresswarnings("unchecked") public list<housetemplate> get() { return (list<housetemplate>) applicationcontext.getbean("templates"); } }
如果你不想註冊為bean,也可以將變數宣告為靜態。
這是一個範例。
@Configuration @ConfigurationProperties(prefix = "House") public class TestConfig { private static List<HouseTemplate> templates; public static List<HouseTemplate> get() { return templates; } public List<HouseTemplate> getTemplates() { return templates; } public void setTemplates(List<HouseTemplate> templates) { TestConfig.templates = templates; } } @RestController @RequestMapping("/api/test") public class TestController { @GetMapping("get") public List<HouseTemplate> get() { return TestConfig.get(); } }
以上是從應用程式 yml 載入物件清單 Java Spring Boot的詳細內容。更多資訊請關注PHP中文網其他相關文章!