Comment externaliser application.propriétés dans Tomcat serveur web pour le Printemps?
SpringApplication charge les propriétés de l'application.propriétés
fichiers dans les emplacements suivants et les ajouter à l'Printemps
Environnement:- A /config subdirectory of the current directory. - The current directory - A classpath /config package - The classpath root
La liste est ordonnée par ordre de précédence (propriétés définies dans des endroits
plus haut dans la liste remplacent celles définies dans le bas de lieux).
Question: lors de l'exécution d'un war
fichier sur un tomcat
serveur: comment puis-je ajouter un emplacement supplémentaire pour l' application.properties
à l'extérieur le classpath ou le conteneur tomcat, comme d:\application.properties
?
L'emplacement personnalisé doit obtenir la plus haute priorité concernant les emplacements ci-dessus.
Problème est: j'ai peut bien sûr ajouter un /config
dossier à l'intérieur de mon explosé guerre dans le tomcat webapps
dossier, mais je vais perdre toute configuration personnalisée si le répertoire webapps est nettoyé et la guerre est redéployé.
Donc je voudrais ajouter un emplacement supplémentaire à l'extérieur.
application.propeties
sur le Tomcat classpath?Mais si j'ai plusieurs
war
fichiers, et ayant chacun une application.properties
, où dois-je mettre, sans écraser les uns les autres?Vous pouvez fournir le fichier externe emplacement pendant le démarrage du pot.
java -jar myproject.jar -spring.config.location=D:/application.properties
OriginalL'auteur membersound | 2017-01-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir un
spring_config_location
variable d'environnement pointant vers le dossier qui contient votre application.fichier de propriétés.Dans le cas de Tomcat, vous pouvez le faire en ajoutant la ligne suivante à votre
<TOMCAT_HOME>/bin/setenv.sh
fichier (créer le fichier s'il est manquant):Placez les propriétés de fichier dans ce dossier. Dans le cas où vous avez plusieurs applications, vous pouvez définir le nom du fichier de propriétés de chaque application unique. Pour un Printemps de Démarrage les applications que j'ai fait comme ceci:
Cela permettra de choisir le nouveau nom lors de l'exécution avec le DÉMARRAGE. Pour avoir le nom configuré lors de son déploiement sur Tomcat trop, remplacer les configurer de
SpringBootServletInitializer
comme suit:Puis le nom de votre fichier de propriétés comme:
my-app.properties
. Au lieu de le nom par défaut, le Printemps de regarder pour que l'. Vous pouvez mettre toutes vos applications propriétés des fichiers dans le dossier spécifié,/usr/local/tomcat/conf/
dans notre échantillon. Votre des propriétés externes obtiendrez la priorité. Voir ici pour priorités: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.htmlMise à JOUR
Depuis Printemps Boot 2 le comportement de
spring_config_location
a changé (à partir de la guide de migration):Sur la base de votre utilisation, vous devez envisager des propriétés pour définir une variable d'environnement. La nouvelle devrait ressembler à
spring_config_additional-location
danssetenv.sh
.Où les fichiers sont recherchées à partir d'décrit dans la la documentation de référence trop.
en utilisant ce que je ne suis pas en mesure de genearte fichier war.
La version de Spring Boot / Printemps utilisez-vous? Depuis le Démarrage de 2 ils ont changé le comportement de "spring_config_location". J'ai mis à jour ma réponse pour couvrir la dernière version. Si ce n'est pas le cas, quelle est l'erreur que vous obtenez?
OriginalL'auteur Vladimir Mitev
Pour moi la meilleure façon de le faire, était de placer un fichier de contexte à l'intérieur de Tomcat dossier config. Par exemple, si votre application est en cours d'exécution en vertu du chemin de la racine (par exemple.
http://your_domain.com/
), vous devez créer un fichier[path_to_your_tomcat]/conf/Catalina/localhost/ROOT.xml
. Si votre application s'exécute dans un chemin différent, par exemplehttp://your_domain.com/example_path
le fichier doit être nommé comme ceci[path_to_your_tomcat]/conf/Catalina/localhost/example_path.xml
. À l'intérieur de ce fichier, vous pouvez spécifier un chemin d'accès de l'application externe.les propriétés de fichier qui peut être placé n'importe où sur votre disque dur.OriginalL'auteur Grzegorz B.
J'ai eu à faire plusieurs fois et le meilleur moyen que j'ai trouvé est de configurer un répertoire externe comme classpath de ressources dans le conteneur:
Ensuite, dans le répertoire place les ressources que vous souhaitez externaliser et tout fonctionne bien. Pour charger la ressource au printemps, vous pourriez le faire de cette façon:
Vous pouvez voir que, comme vous l'avez dit que vous aimeriez peut-être avoir de multiples applications déployées dans chaque tomcat, vous pouvez simplement créer une structure de répertoire dans le dossier que vous avez défini dans le classpath, à maintenir des
application.properties
pour chacun de voswar
applicationsDans le cas où vous voulez maintenir dinamically la section nom de l'application dans votre configuration Spring, vous pouvez le faire de plusieurs façons, au cours de l'étape d'emballage dans maven ou même en utilisant le contexte de l'application de chemin
OriginalL'auteur jlumietu
J'ai enfin ajouté la propriété suivante à extérioriser par exemple sécurisé propriétés:
spring.config.additional-location=/etc/tomcat/<appname>/application-production.properties
OriginalL'auteur membersound