La lecture d'une carte à partir de données en Java se null

J'ai un problème dans la lecture de mon yaml par le biais de java, à l'aide de printemps. Laissez-moi vous montrer le premier code

@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "countries")
public class UserLimitReader {

    private HashMap<String, Integer> orders;

    private HashMap<String, Integer> requests;

    public HashMap<String, Integer> getOrders() {
        return orders;
    }

    public void setOrderRedeemableLimit(HashMap<String, Integer>         orders) 
{
        this.orders= orders;
}

public HashMap<String, Integer> getRequests() {
    return requests;
}

public void setMonthlyRedeemableLimit(HashMap<String, Integer> requests) {
    this.requests= requests;
}
}

Mon fichier yaml:

cassandra:
    hosts: localhost:9142, 127.0.0.1:9142
    keyspace: test
countries:
    orders:
      JPY: 1000
      USD: 1000
    requests:
      JPY: 100000
      USD: 100000

Le printemps contexte xml a aussi ceci:

<bean id="yamlProperties"
    class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
    <property name="resources">
        <value>classpath:config/application.yaml</value>
    </property>
</bean>

<context:property-placeholder
    properties-ref="yamlProperties" />

Maintenant, l'attente que j'ai(eu), c'est que, lors de l'exécution de mon ressort de l'application de test(le contexte xml est de mon test de ressources, le yaml est aussi dans mon test), ces valeurs de commandes et les demandes sont ensemble, mais ils sont nuls. Notez également qu'il y a d'autres valeurs dans mon yaml en plus de ce que je suis injection à l'aide de @Valeur(${...}), ils sont injectés absolument parfait!

J'ai regardé ce: Spring Boot - injecter de la carte de l'application.yml

J'ai fait pratiquement la même, mais encore, mes valeurs ne sont pas définies. Aide gentiment.

J'ai été en passant par google, trouvé ce lien:
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/YamlPropertiesFactoryBean.html

Dans ce, dit-il, tout est à lire comme une chaîne et non une carte. Est-il une autre classe qui prend en charge la lecture de fichier Yaml la façon dont ils l'ont fait ici: Spring Boot - injecter de la carte de l'application.yml

Ou est ma compréhension de YamlPropertiesFactoryBean mal?

compile 'org.springframework:spring-core:4.2.+'
compile 'org.springframework:spring-beans:4.2.+'
compile 'org.springframework:spring-context:4.2.+'
compile 'org.springframework.boot:spring-boot:1.3.1.RELEASE'
compile 'org.springframework.boot:spring-boot-configuration-processor:1.3.1.RELEASE'

Ce sont les dépendances de gradle. Vous demandez peut-être pourquoi j'ai printemps-core et spring-boot, pour l'essentiel, je ne veux pas le printemps-démarrage, mais sans ressort-boot, je n'ai pas à ajouter @EnableConfigurationProperties et @ConfigurationProperties, honnêtement, je ne sais pas si je peux lire le fichier yaml contenu dans une carte sans eux. D'où ces deux dépendances sont ajoutés, mais si il y a un moyen de les éliminer, je serais plus qu'heureux de supprimer ces deux dépendances.

Cordialement,
Pavan

Êtes-vous sûrs de votre classe est chargée par le printemps? Je ne vois aucune référence dans votre fichier de contexte à UserLimitReader. Êtes-vous à l'aide de composants d'analyse que vous avez quitté?
Salut Coby, C'est la partie du printemps, qui le charge: <bean id="yamlProperties" class="org.springframework.les haricots.usine.config.YamlPropertiesFactoryBean"> <property name="ressources"> <valeur>classpath:config/application.yaml</valeur> </propriété> </bean> <contexte:biens immobiliers-propriétés de l'espace réservé-ref="yamlProperties" /> Le fait est que pour mes autres haricots, <bean id="DatabaseConnector" class="com.rakuten.point.aldebaran.cassandra.connecteur.mettre en oeuvre.DatabaseConnectorImpl"> <property name="hôtes" value="${cassandra.les hôtes}"></propriété> </bean> Ici, il devient chargé!
Mais je ne peux pas faire la même chose pour UserLimitReader, car il jette toujours un message d'erreur disant, ne peut pas résoudre place de titulaire pays.les commandes mentionnées dans "${pays.les commandes}"
Veuillez vérifier mon commentaire à propos de comment lire fichier YAML au Printemps et à l'inclure dans JUnit et TestNG test ici: stackoverflow.com/a/37270778/3634283
Cette question était plus dans la lecture des entrées directement dans une carte. Mais le vôtre est de la lecture de yaml, qui aide, mais peut-être pas dans ce scénario. Mais il aide vraiment et je pense que la solution a été fournie par Coby qui m'a aidé à résoudre le problème.

OriginalL'auteur Pavanraotk | 2016-01-09