32 votes

Quelle est la meilleure pratique pour lire les fichiers de propriétés dans Java EE?

Plusieurs applications Web Java EE s'exécutent sur le même serveur d'applications et je souhaitais externaliser les fichiers de propriétés situés dans les fichiers JAR dans un nouveau répertoire afin de rendre ces propriétés visibles.

Quelle est la méthode recommandée pour charger ces fichiers de propriétés?

24voto

Tom Points 16783

Personnellement, j'utilise la classe java.util.Properties et la méthode load () pour charger des propriétés.

 InputStream inputStream  = MyProperties.class.getClassLoader().getResourceAsStream("file.properties");
this.properties = new Properties();
this.properties.load(inputStream);
 

Ensuite, j'utilise la méthode get () pour lire les propriétés en tant que chaînes.

10voto

Paul Morie Points 6956

Si vous utilisez Spring, il est agréable de résumer dans le code qu'il existe même un fichier de propriétés et que vous utilisez PropertyPlaceHolderConfigurer . Cela vous permet d'externaliser les propriétés d'une définition BeanFactory vers un fichier de propriétés Java standard.

Exemple (extrait des documents de printemps):

 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:com/foo/jdbc.properties</value>
    </property>
</bean>

<bean id="dataSource" destroy-method="close"
      class="org.apache.commons.dbcp.BasicDataSource">
    <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>
 

7voto

mtpettyp Points 3931

Si vous utilisez JBoss, vous pouvez créer un fichier de service de propriétés (nommé quelquechose-service.xml).

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>

<server>    
  <mbean code="org.jboss.varia.property.SystemPropertiesService" 
           name="jboss:type=Service,name=MySystemProperties">        
    <attribute name="Properties">
       property_a=value a
       property_b=value b
    </attribute>         
  </mbean>
</server>
 

Copiez ceci dans votre répertoire de déploiement et les propriétés seront disponibles avec System.getProperty ()

1voto

kgiannakakis Points 62727

Ce lien a quelques conseils. Vous pouvez utiliser ResourceBundle ou faire quelque chose comme ceci:

 // Assuming you are in a Servlet extending HttpServlet 
// This will look for a file called "/more/cowbell.properties" relative
// to your servlet Root Context
InputStream is = getServletContext().getResourceAsStream("/more/cowbell.properties");
Properties  p  = new Properties();
p.load(is);
is.close();
 

La méthode recommandée pour moi consiste à utiliser le printemps, comme l’a suggéré une autre réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X