L'éditeur PHP Xigua vous amènera à approfondir la question du chargement des listes d'objets dans l'application yml en Java. Dans Java Spring Boot, en configurant correctement le fichier yml, vous pouvez charger la liste d'objets et l'appliquer de manière flexible dans l'application. Ensuite, maîtrisons ensemble cette technique pour améliorer la praticité et l'efficacité du développement de Spring Boot.
J'ai cette classe de configuration :
@configuration @configurationproperties(prefix = "house") public class projectconfig{ private list<housetemplate> templates; // getters and setters }
classe de modèle de maison :
public class housetemplate{ private string id; private string description; // getters and setters }
Voici mon application-test.yml
house: templates: - id: "colonial" description: "colonial house template" - id: "cottage" description: "cottage house template" - id: "apartment" description: "apartment house template" examplestring: hello
Dans ma classe de test, j'ai les éléments suivants :
@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(); } }
Le premier test pour examplestring réussit, mais le deuxième test échoue. Pourquoi ne puis-je pas mapper yml dans la liste des modèles maison ?
Modifier
<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>
Je sais qu'ils sont vraiment vieux et j'aimerais les mettre à niveau, mais je ne peux pas... c'est à cela que je dois faire face.
Utilisez @configurationproperties
从yml中读取后,可以将其注册为bean,然后可以通过applicationcontext
pour l'obtenir.
@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"); } }
Si vous ne souhaitez pas vous inscrire en tant que bean, vous pouvez également déclarer la variable comme statique.
Voici un exemple.
@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(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!