2017-09-28 2 views
2

J'ai créé une application web J2EE en utilisant Spring framework sur le serveur Tomcat, et mon application a besoin de lire certaines propriétés (comme les paramètres de connexion jdbs, les chemins de dossiers etc ...) dont j'ai besoin pour être externe. Ce que je veux dire, c'est qu'aujourd'hui j'ai mis le pot sur le serveur. Si dans 2 ans les paramètres de connexion DB ou les dossiers que je veux utiliser vont changer, je ne veux pas redéployer l'application, mais juste changer le fichier de propriétés.Application Web avec Spring: comment externaliser les propriétés des fichiers?

Ce que je en est maintenant un fichier .properties dans le classpath, et un haricot qui le lit:

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

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="url" value="${jdbc.url}" /> 
    <property name="driverClassName" value="${jdbc.driverClassName}" /> 
    <property name="username" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
</bean> 

database.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/cheExport?useSSL=false 
jdbc.username=root 
jdbc.password=root 

Comment puis-je accomplir mon but? Si je me souviens bien, il y a quelque chose que je peux faire dans le serveur XML, où je peux spécifier qu'un certain dossier contient un fichier de propriétés. Mais alors comment puis-je mettre les choses ensemble?

Dans ce post Read properties file outside JAR file est posé la même question, mais sans utiliser Spring, donc je pense que ce n'est pas utile dans mon cas

Je lis aussi qu'il est courant d'utiliser l'initialisation du printemps dans ce cas, mais je suis using Spring MVC

Répondre

0

Vous utilisez les propriétés util. montre juste pour toi mon exemple de code.

racine context.xml

<util:properties id="config" 
    location="classpath:config/config.properties" /> 

<bean id="officeDataSource" 
    class="org.springframework.jdbc.datasource.SimpleDriverDataSource"> 
    <property name="driverClass" value="#{config['driverClass']}" /> 
    <property name="url" value="#{config['commonUrl']}" /> 
    <property name="username" value="#{config['username']}" /> 
    <property name="password" value="#{config['password']}" /> 
</bean> 

config.properties

driverClass=org.mariadb.jdbc.Driver 
commonUrl=jdbc:mariadb://123.345.563.16:3306/FACE_BOOK_DB?useUnicode=yes&amp;characterEncoding=UTF-8 

username=id 
password=pw 

pour votre projet image de structure. Existe ressource (web-inf-classes-config) dans votre projet.

enter image description here

+0

Ce que je ne comprends pas est la suivante: est-il possible de mettre à l'emplacement = « classpath » un fichier qui est externe au pot? Je veux dire, je voudrais mettre sur le serveur un dossier qui contient le .jar: root/myApp.jar, puis dans le même dossier le fichier de propriétés: root/database.properties – frabis

+0

mis à jour pour vous. mon message. – Byeon0gam

+0

J'ai essayé ceci et je ne comprends toujours pas comment cela fonctionne: J'ai obtenu un pot, et le fichier .properties (que j'ai mis exactement au même endroit, sous src/main/resources) est à l'intérieur du pot, dans le Dossier WEB-INF/classes/config, donc je ne peux pas le modifier. – frabis