Maison  >  Article  >  Charger la liste des objets de l'application yml Java Spring Boot

Charger la liste des objets de l'application yml Java Spring Boot

WBOY
WBOYavant
2024-02-22 13:16:051125parcourir

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.

Contenu de la question

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.

Solution

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer