Question

Comment puis-je injecter un fichier de propriétés contenant une carte à être utilisé en tant que constructeur supplémentaire arg en utilisant le champ.

Avec une carte en cours de chargement à partir d'un fichier de propriétés

le haricot est actuellement configuré en utilisant:

<bean id="graphDbService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
     init-method="enableRemoteShell" destroy-method="shutdown">

     <constructor-arg index="0" value= "data/neo4j-db"/>
         <constructor-arg index="1" value=?  />
</bean>

Java équivalent:

Map<String,String> configuration =  EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "data/neo4j-db", configuration );

Merci

Était-ce utile?

La solution

Quelque chose comme ceci:

<bean id="configuration" class="org.neo4j.kernel.EmbeddedGraphDatabase" 
      factory-method="loadConfigurations">
   <constructor-arg value="neo4j_config.props"/>
</bean>

<bean id="graphDbService" class="org.neo4j.kernel.EmbeddedGraphDatabase"
     init-method="enableRemoteShell" destroy-method="shutdown">

     <constructor-arg index="0" value="data/neo4j-db"/>
     <constructor-arg index="1" ref="configuration"  />
</bean>

profite de

Autres conseils

Créer un bean qui charge les propriétés (et prend le nom de fichier en argument) et injecter cette place.

EDIT Lorsque vous utilisez des annotations, des choses comme l'injection de constructeur devient plus simple:

@Bean
public Map<String,String> configuration() {
    return EmbeddedGraphDatabase.loadConfigurations( "neo4j_config.props" );
}

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration() );
}

Notez que la seconde méthode de définition de haricot « simplement » appelle le premier. Lorsque ce code est exécuté, le printemps fera un peu de magie de sorte que vous pouvez toujours remplacer la fève ailleurs (ie les haricots écrasent encore les uns des autres) et il fera en sorte que le corps de la méthode sera exécutée une seule fois (peu importe la fréquence et d'où il a été appelé).

Si la config est dans une autre classe @Configuration, alors vous pouvez @Autowired il:

@Autowired
private Map<String,String> configuration;

@Bean
public GraphDatabaseService graphDb() {
    return new EmbeddedGraphDatabase( "data/neo4j-db", configuration );
}
scroll top