Contrôler un projet avec Maven et Spring: Comment définir un fichier de configuration Spring avec les profils Maven?
Je suis en train de configurer un Ressort fichier de configuration avec des informations de base de données basée sur le fait qu'un certain Maven profil est actif. J'ai vu des morceaux de réponses à cela, mais je vais avoir du mal à mettre tout cela ensemble.
J'ai un profil Maven comme ceci:
<profiles>
<profile>
<id>production</id>
<activation>
<property>
<name>environment.type</name>
<value>prod</value>
</property>
</activation>
</profile>
<profile>
<id>development</id>
<activation>
<property>
<name>environment.type</name>
<value>dev</value>
</property>
</activation>
<!-- Database properties for Spring -->
<properties>
<db.driver>oracle.jdbc.driver.OracleDriver</db.driver>
<db.type>oracle</db.type>
<db.host>192.168.0.0</db.host>
<db.port>1521</db.port>
<db.name>myDb</db.name>
<db.url>jdbc:${db.type}:thin:@${db.host}:${db.port}:${db.name}</db.url>
</properties>
Et un settings.xml fichier comme ceci:
<servers>
<server>
<id>development</id>
<username>jsmith</username>
<password>secret</password>
</server>
</servers>
....
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<environment.type>dev</environment.type>
</properties>
</profile>
</profiles>
Et dans servlet-context.xml:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>${db.driver}</value>
</property>
<property name="url">
<value>${db.url}</value>
</property>
<property name="username">
<value>${db.username}</value>
</property>
<property name="password">
<value>${db.password}</value>
</property>
<property name="maxActive">
<value>10</value>
</property>
<property name="maxIdle">
<value>1</value>
</property>
</bean>
Ma question est, fondamentalement, comment puis-je obtenir les propriétés Maven dans le servlet-context.xml fichier? Ai-je besoin d'une .fichier de propriétés? Je connais un peu le filtrage dans Maven et PropertyPlaceholderConfigurer au Printemps mais je ne sais pas comment les mettre ensemble, ou vont-ils ensemble? Ou est-il un moyen plus simple?
source d'informationauteur ksnortum
Vous devez vous connecter pour publier un commentaire.
Ai-je besoin d'une .fichier de propriétés?
Généralement parlant, OUI, vous avez besoin d'utiliser .fichier de propriétés, c'est ce que nous faisons habituellement, en particulier pour la manipulation de la base de données de configuration de la connexion au printemps contexte fichier.
Le but de .fichier de propriétés est de fournir la capacité de la configuration des connexions de base de données lors de l'exécution de l'application (l'application web, habituellement nécessitent le redémarrage de l'application conteneur/serveur après .fichier de propriétés de changements). Cela se fait habituellement lors de l'application de déploiement/installation étape dans différents environnements (DEV/TEST/UAT/PROD).
C'est pas une bonne pratique pour stocker les paramètres de connexion dans la base de données pom.xml comme le but de pom.xml est pour la description du projet et utilisé seulement une fois à la compilation de l'application de temps (par exemple mvn deploy). Et pour la plupart du temps, même s'il est emballé dans le final jar/war, nous n'avons pas vraiment de soins et touchez de suite de l'application est construite.
À utiliser .fichier de propriétés au printemps contexte, définir un propertyConfigurer bean dans votre applicationContext, par exemple:
Espérons que cela a du sens.
À l'aide de ce que j'ai appris de ces deux réponses et mes recherches, j'ai pu obtenir un développement/système de production, contrôlée par le pom, qui définit la base de données correcte des valeurs.
Tout d'abord, dans le pom, j'ai créé deux profils.
Dans le servlet-context.xml dans le répertoire web-inf, j'ai mis les détenteurs de place:
Puis j'ai créé un fichier de propriétés pour s'asseoir dans src/main/resources
Je peux alors commencer à Maven avec
ou ont un settings.xml qui définit le bon profil pour moi:
La question principale est: comment allez-vous déployer votre fichier WAR pour les différents environemnts?, par l'intermédiaire d'un RPM, jenkins construire, à la main?, aussi, ne vous veux le même fichier WAR de déployé à tous les environnements?
a) vous voulez que votre GUERRE pour être déployé vi JENKINS travail (ou manuellement par l'intermédiaire de maven), il suffit de traiter vos ressources et de l'utilisation du profil dans le processus de construction de la jarre (mvn -P production propre déployer), la pom maven devrait inclure le code comme ceci:
Vous devez définir vos propriétés dans le fichier your_proyect.propriétés (un par l'environnement) et également définir config.de l'environnement.dir pour tous les vos différents profils.
b) vous voulez la même GUERRE/RPM, etc. pour tous vos projets. Ensuite, vous devez définir le environemt en tant que propriété de la java de démarrage de l'application servert: -DENVIRONMENT=production, puis de charger toutes les propriétés paramétrées PropertyPlaceholderConfigurer comme yorkw souligné:
Aussi n'oubliez pas de mettre toutes les propriétés de la GUERRE, les pom pour la GUERRE, construire devrait inclure le code comme ceci:
c) mixte: vous pouvez choisir manuellement un environnement sur celle définie comme une propriété dans le serveur (-D), vous pouvez l'obtenir en utilisant les propriétés par défaut, si pas trouvé, alors le recours à la une pour que environemt, cette étape est assez compliquée car elle nécessite un autre ensemble de propriétés, si vous êtes intéressé vérifier mon post:
le déploiement des environnements différents avec maven et le printempsje suis aussi intéressé par une meilleure solution pour c)