Je travaille sur un projet Spring WebFlow qui a beaucoup de valeurs de propriétés dans les fichiers XML, comme tout programmeur Spring le sait. J'ai des noms d'utilisateur de base de données, un mot de passe, des URL, etc.
Nous utilisons Eclipse avec Spring WebFlow et Maven. Nous essayons d'avoir un SA faire les builds mais le SA ne veut pas aller dans les fichiers XML pour changer les valeurs, mais d'autre part , nous ne connaissons pas les valeurs de production. Comment travaillons-nous avec cela?
La plupart SA sont plus disposés et confiants à traiter avec .properties
fichier plutôt que .xml
.
Spring provide PropertyPlaceholderConfigurer pour vous permettre de tout définir en un ou plusieurs .properties
fichier et remplacez l'espace réservé dans applicationContext.xml
.
Créer un app.properties
en dessous de src/main/resources/
dossier:
... ...
# Dadabase connection settings:
jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/app_db
jdbc.username=app_admin
jdbc.password=password
... ...
Et utilisez PropertyPlaceholderConfigurer dans applicationContext.xml
ainsi:
... ...
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>app.properties</value>
</property>
</bean>
... ...
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
Consultez exemple Spring PropertyPlaceholderConfigurer pour plus de détails.
De plus, du point de vue du déploiement d'application, nous conditionnons généralement l'application dans un certain format exécutable et les fichiers .properties sont généralement compressés dans le fichier exécutable war ou ear. Une solution simple consiste à configurer votre bean PropertyPlaceholderConfigurer pour résoudre les propriétés à partir de plusieurs emplacements dans un ordre prédéfini, donc dans l'environnement de déploiement, vous pouvez utiliser un emplacement fixe ou une variable d'environnement pour spécifier le fichier de propriétés, notez également que pour simplifier la tâche de déploiement/configuration pour SA, nous utilisons généralement un seul fichier externe .properties définir toute la configuration d'exécution, comme suit:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- Default location inside war file -->
<value>classpath:app.properties</value>
<!-- Environment specific location, a fixed path on server -->
<value>file:///opt/my-app/conf/app.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="true"/>
</bean>
J'espère que cela t'aides.