web-dev-qa-db-fra.com

Meilleures façons de gérer les valeurs des propriétés dans un fichier XML dans Spring, Maven et Eclipses

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?

16
techsjs2012

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.

37
yorkw