首頁  >  文章  >  從應用程式 yml 載入物件清單 Java Spring Boot

從應用程式 yml 載入物件清單 Java Spring Boot

WBOY
WBOY轉載
2024-02-22 13:16:051082瀏覽

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除