J'ai une question concernant la différence entre PropertyPlaceholderConfigurer (org.springframework.beans.factory.config.PropertyPlaceholderConfigurer) et les filtres normaux définis dans mon pom.xml.PropertyPlaceholderConfigurer vs Filtres - Haricots de printemps
J'ai regardé des exemples, et il semble que même si les filtres sont définis et marqués comme étant actifs par défaut dans le fichier pom.xml, ils utilisent encore PropertyPlaceholderConfigurer dans le fichier applicationContext.xml de Spring. Cela signifie que le fichier pom.xml fait référence à un fichier filter-LOCAL.properties alors que le fichier applicationContext.xml fait référence à application.properties et que les deux contiennent les mêmes paramètres.
Pourquoi est-ce? Est-ce ainsi que c'est censé être fait? Je suis capable d'exécuter l'objectif mvn jetty: exécuter sans l'application.properties présente, mais si j'ajoute des paramètres à l'application.properties qui diffèrent des filter-LOCAL.properties, ils ne semblent pas redéfinir.
Voici un exemple de ce que je veux dire:
pom.xml
<profiles> <profile> <id>LOCAL <activation> <activeByDefault>true </activation> <properties> <env>LOCAL </properties> </profile> </profiles>
applicationContext.xml
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:application.properties </list> </property> <property name="ignoreResourceNotFound" value="true"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
un exemple du contenu de application.properties et filters-LOCAL.properties
jdbc.driver=org.postgresql.Driver jdbc.url=jdbc:postgresql://localhost/shoutbox_dev jdbc.username=tester jdbc.password=tester
Puis-je supprimer le propertyConfigurer du applicationContext, créez un filtre PROD et ne pas tenir compte du fichier application.properties, ou la volonté qui me donne des problèmes lors du déploiement sur le serveur de production?
Avez-vous une suggestion de ce que je devrais google pour savoir comment utiliser Maven pour sélectionner les propriétés du ressort comme vous l'avez suggéré? – John
@John: Personnellement, je préfère Ivy et Ant, mais les principes devraient être les mêmes. En fonction de l'environnement pour lequel je construis, je copie un fichier de propriétés différent et le renommer par exemple application.properties. Ensuite, mon contexte d'application Spring qui importe le PropertyPlaceholderConfigurer ne connaît que les applications.properties. Si cela est copié à partir de test.properties ou production.properties est inconnu pour le conteneur Spring. Seuls mes contextes de test connaissent les propriétés de test pour mes tests JUnit. – Espen
-1 - créer des instances séparées de votre déployable pour chaque environnement est une mauvaise idée. Cela ne va pas bien et vous finirez par devoir faire la guerre pour voir quelles propriétés sont incluses. Voir ma réponse ici pour une approche alternative: http://stackoverflow.com/questions/1311360/property-placeholder-location-from-another-property/1312341#1312341 – Pablojim