10
votes

Comment injecter des propriétés completsFile dans un Springbean

J'ai un fichier de propriétés avec beaucoup de valeurs et je ne veux pas les énumérer dans mon fichier de configuration de haricot séparément. Par exemple: xxx

et ainsi de suite.

J'imagine à injecter complètement comme java.util.properties ou moins en tant que java.util.map . Y a-t-il un moyen de le faire?


0 commentaires

5 Réponses :


14
votes

Oui, vous pouvez utiliser Pour charger un fichier de propriétés et déclarer le java.util.properties résultant comme un haricot. Vous pouvez ensuite injecter cela comme vous le feriez une autre propriété de haricot.

voir Section C.2.2.3 du manuel de ressort et de leur exemple: xxx

N'oubliez pas de déclarer le UTIL: Espace de noms selon Ces instructions .


1 commentaires

Traiter est comme n'importe tel bean. Utilisez-le dans la configuration XML à l'aide de REF = MyProps ou AutoWire A Propriétés pour laisser le ressort s'en occuper pour vous.



2
votes

Il est possible avec le «code> ProtitierverriDeconfigurier Code> Mécanisme:

beanname1.foo=foovalue
beanname2.bar.baz=bazvalue


1 commentaires

Merci de votre réponse - Ma faute, le fichier de propriétés sera édité par un "non-développeur" et doit être "facile à lire" pour l'éditeur sans fond particulier. Ainsi, les noms des haricots ne seraient pas la bonne façon d'utiliser comme clé.



11
votes

pour java config, utilisez PropriétésFactorybean code>: xxx pré>

puis définissez l'objet Propriétés: P>

@Bean
public AnotherBean myBean() {
    AnotherBean myBean = new AnotherBean();
    ...

    myBean.setProperties(myProperties());

    ...
}


2 commentaires

Wow, c'est beaucoup de code. N'a-t-il pas un moyen plus facile comme la configuration XML 1-liner ?


@Rustyx Oh! Je n'ai pas trouvé à ce moment-là une autre façon de le faire, mais votre est très agréable! :)



18
votes

pour java config, vous pouvez utiliser quelque chose comme ceci:

@Autowired @Qualifier("myProperties")
private Properties myProps;

@Bean(name="myProperties")
public Properties getMyProperties() throws IOException {
    return PropertiesLoaderUtils.loadProperties(
        new ClassPathResource("/myProperties.properties"));
}


0 commentaires

0
votes

Ceci est un écho de Réponse de @skaffman dans cette question. J'ajoute plus de détails pour aider les autres et moi-même quand j'essaie de résoudre ce problème à l'avenir.

Il existe trois façons d'injecter le fichier de propriétés p>

Méthode 1 H1>
@Value("#{myProps[myPropName]}")
private String myField; 


0 commentaires