Printemps de démarrage externe configuration de fichier de propriétés
J'ai un ressort de démarrage de l'application que je peux le paquet dans une guerre que je veux déployer dans différents environnements. Pour automatiser ce déploiement, il serait plus simple d'avoir le fichier de configuration externalisés.
Actuellement tout fonctionne bien avec une application.fichier de propriétés dans src/main/resources. Puis-je utiliser mvn install pour construire une guerre déployable à tomcat.
Mais je voudrais utiliser un .fichier yml qui n'a pas besoin d'être présent sur mvn install mais qui serait lu à partir au cours du déploiement de la guerre et est dans le même ou un répertoire par rapport à ma guerre.
24. extériorisés de configuration montre où le printemps de démarrage va chercher les fichiers et 72.3 Modifier l'emplacement de l'externe propriétés d'une application donne plus de détails sur comment configurer cela, mais je ne comprends pas comment traduire cela à mon code.
Ma classe application qui ressemble à ceci:
package être.ugent.lca;
Updated below
J'ai besoin d'ajouter un @PropertySource à ce fichier? Comment pourrais-je vous référer à un certain chemin relatif?
J'ai l'impression que c'est probablement documenté là que la plupart des printemps de démarrage de la documentation, mais je ne comprends pas comment ils me dire de le faire.
MODIFIER
Ne sais pas si cela devrait être une question distincte, mais je pense que c'est toujours connexe.
Lors du réglage de l'os variable de l'erreur de fichier yaml ne trouve pas allé loin. Pourtant, j'obtiens toujours la même erreur à nouveau comme quand je n'avais pas d'application .propriétés ou .fichier yml.
L'Application ressemble maintenant à ceci:
@Configuration
**@PropertySource("file:${application_home}/application.yml")**
@ComponentScan({"be.ugent.lca","be.ugent.sherpa.configuration"})
@EnableAutoConfiguration
@EnableSpringDataWebSupport
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
La application_home OS variable
$ echo $application_home
C:\Masterproef\clones\la15-lca-web\rest-service\target
Ma demande.fichier yml(la partie, il se plaint d'):
sherpa:
package:
base: be.ugent.lca
Erreur lors de java-jar *.la guerre
Toutes les variations:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'sherpa.package.base' in string value "${sherpa.package.base}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:204)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:178)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:808)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1027)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
... 142 more
Mon edition effacer l'emplacement? Les propriétés sont essentiellement les mêmes dans la plupart des endroit, mais la base de données et de connexion de base de données peut changer en fonction de la TST, QAS
OriginalL'auteur turoni | 2017-03-25
Vous devez vous connecter pour publier un commentaire.
L'utilisation des fichiers de propriétés de
La réponse se trouve dans le Ressort de Démarrage Docs, je vais essayer de le décomposer pour vous.
Tout d'abord, non, vous ne devez pas utiliser
@PropertySource
lorsque l'on travaille avec de configuration Yaml, comme mentionné ici sous le Yaml lacunes :Alors, comment charger propery fichiers? C'est expliqué ici L'Application De La Propriété Des Fichiers
Est chargé pour vous:
application.yml
, le placer dans l'un des répertoires comme indiqué dans le lien ci-dessus. C'est parfait pour votre configuration générale.Maintenant pour votre environnement de configuration spécifiques (et des trucs comme les mots de passe que vous souhaitez utiliser des fichiers de propriétés, la façon de le faire est également expliqué dans la section :
Si vous utilisez le
spring.config.location
de l'environnement de la propriété.Imaginez que vous avez déjà un fichier de config:
application-external.yml
dans la conf/dir dans votre répertoire /home, il suffit de l'ajouter comme ceci:-Dspring.config.location=file:${home}/conf/application-external.yml
comme un paramètre de démarrage de votre JVM.Si vous avez plusieurs fichiers, suffit de les séparer par une virgule. Notez que vous pouvez facilement utiliser des propriétés de ce type pour remplacer les propriétés, et pas seulement ajouter.
Je voudrais des conseils pour tester cela par l'obtention de votre application pour travailler avec votre application interne.fichier yml , et puis écraser un (test) de la propriété dans les propriétés du fichier de journal et de la valeur de quelque part.
Lier Yaml des propriétés aux objets
Lorsque l'on travaille avec Yaml propriétés j'ai l'habitude de les charger avec
@ConfigurationProperties
, ce qui est idéal lorsque l'on travaille avec par exemple des listes ou plus complexe de la structure de propriété. (C'est pourquoi vous devez utiliser Yaml propriétés, pour de simples propriétés de vous sont peut-être mieux de l'utilisation des fichiers de propriété). Lire ceci pour plus d'informations: Type-Safe propriétés de ConfigurationSupplémentaire: le chargement de ces propriétés dans IntelliJ, Maven et JUnit tests
Parfois, vous voulez charger de ces propriétés dans votre maven construit ou lors de l'exécution des tests. Ou tout simplement pour le développement local avec votre IDE
Si vous utilisez IntelliJ pour le développement, vous pouvez facilement ajouter ce en l'ajoutant à votre Tomcat Configuration d'essai : "Exécuter" -> "Modifier les Configurations" , sélectionnez votre configuration d'exécution sous "Serveur Tomcat" , cochez l'onglet Serveur et l'ajouter sous "VM Options".
D'utiliser des fichiers de configuration dans votre Maven build : configurer le maven plugin surefire comme ceci dans votre pom.xml:
Lors de l'exécution de JUnit tests dans IntelliJ:
-ea -Dspring.config.location=file:${home}/conf/application-external.yml
OriginalL'auteur loïc
Oui, vous avez besoin d'utiliser
@PropertySource
comme indiqué ci-dessous.Le point important ici est que , vous devez fournir les
application_home
propriété (ou choisir un autre nom) que l'OS de la variable d'environnement ou du Système de propriété, ou vous pouvez passer comme argument de ligne de commande lors du lancement du Printemps de démarrage. Cette propriété indique où le fichier de configuration (.properties
ou.yaml
) est exactement situé (exemple:/usr/local/my_project/
etc..)oui, vous avez raison... set de Windows OS variable d'environnement comme
application_home=C:\\myproject
(ou tout autre OS variable)Étrange que j'ai fait. Aucune idée de pourquoi il ne peut pas toujours résoudre ma propriété?
une chose que j'ai pu remarquer est, dans votre ligne précédente, vous avez dit que
$application_home
, ce qui est faux, n'a pas de préfixe$
dans l'OS de la variable, il est nécessaire seulement dans la classe java dans le cadre du Printemps de l'Expression de la LangueLe $ est juste pour faire référence à une variable. Le nom est application_home et je me réfère à elle comme vous l'avez mentionné, et comme il est montré dans mes mises à jour classfile
OriginalL'auteur developer
L'un des plus simple à utiliser externalisés propriété de fichier en utilisant la variable d'environnement système est, dans l'application.fichier de propriétés vous pouvez utiliser la syntaxe suivante:
Maintenant, déclarez ci-dessus utilisé des variables d'environnement,
De cette façon, vous pouvez utiliser des valeurs différentes pour une même variable dans les différents environnements.
OriginalL'auteur vishal lakhyani
Utilisez code ci-dessous dans votre classe boot:
utilisez code ci-dessous dans votre contrôleur:
OriginalL'auteur vinoth Kumar