@PropertySource dans un Bocal pour un fichier externe dans le classpath
Je suis en train d'utiliser le framework Spring est @PropertySource
annotation dans un Bocal pour charger un fichier de propriétés de l'extérieur du pot, mais il n'est pas de trouver le fichier.
J'ai besoin d'un fichier de propriétés à l'extérieur du Pot afin de pouvoir le modifier. Je ne sais pas l'emplacement exact où le fichier sera, j'ai pensé que je pouvais avoir juste n'importe où sur le chemin de la classe.
Je suis en utilisant l'annotation suivante sur mon Config
classe.
@PropertySource('classpath:stc.properties')
Et placé stc.properties
dans le même répertoire que la fichier Jar. J'ai essayé en spécifiant le chemin de la classe de manière explicite dans le java
de commande, mais il ne trouve pas le fichier:
java -cp . -jar stc.jar
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load bean class: com.example.stc.Config; nested exception is java.io.FileNotFoundException: class path resource [stc.properties] cannot be opened because it does not exist
at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:162)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:299)
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:254)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:94)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
[...]
Etc.
J'ai aussi essayé d'utiliser ./
que le chemin de la classe, et j'ai essayé en spécifiant le chemin de la classe (avec les deux variantes) dans le Class-Path
attribut du pot est manifeste, mais il donne toujours les mêmes résultats.
OriginalL'auteur brianmearns | 2015-05-06
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez deux fichiers, l'un pour l'autre local pour la production
Et dans tomcat ou votre fichier jar , passer sur ce paramètre
J'ai ajouté ceci dans setenv.sh
APPLICATION_OPTS="-Dlog4j.configurationFile=fichier:$PATH/log4j2.xml -Dlog4j.debug=true -Dapplication.propriétés=fichier:$PATH/de l'application.propriétés
C'est possible avec le Printemps, 4 seulement
J'ai ajouté dans setenv.sh. Mise à jour de ma réponse
OriginalL'auteur vsingh
Utiliser une variable (Système ou de l'Environnement) pour avoir la valeur du fichier et vous pouvez consulter votre fichier comme ceci:
OriginalL'auteur Hammad Dar
Mon environnement était:
OS: Windows | Conteneur: Tomcat | Java: 7 | Printemps: 4.2.4 | Springboot 1.3.1 | Maven
L'étape 1 (la guerre):
Ajouter le fichier externalisée fichier de propriétés à la JVM des propriétés du système.
Que suis l'exécution de cet arrêt de tomcat; j'ai fait cela en créant setenv.chauve-souris dans
<TOMCAT_HOME>/bin/setenv.bat
L'étape 1 b (jar):
Alternative si vous exécutez à partir d'un pot d'utilisation:
-Dexternal.app.properties=file:<PATH_TO_EXTERNAL_FILE>\application-prod.properties
Notez l'utilisation de fichier: au début de la ligne.
Étape 2: Dans mon démarrage de l'application de la classe, j'ai utilisé l'annotation
@PropertySource
à charge de l'environnement spécifique des propriétés de l'application.Étape 3:
À l'aide externalisée propriétés dans le projet
externe/fichier/chemin/de l'application-prod.propriétés
printemps.source de données.url.ext=< PRODUCTION_DATASOURCE >
/src/main/resources/de l'application.propriétés
printemps.source de données.url=${printemps.source de données.url.ext}
Espère que cela aide d'autres ayant le même problème.
OriginalL'auteur Ithar
essayer de donner le chemin d'accès complet du fichier:
qu'en est : @PropertySource('file:/../stc.propriétés')
C'est toujours en supposant que le fichier est dans un emplacement spécifique par rapport au pot.
OriginalL'auteur Iob
vous pouvez utiliser --printemps.config.emplacement=file:/chemin de paramètre lors de l'exécution de pot, où vous indiquez le chemin d'accès au fichier de config (qui peut être un parent).
Plus d'infos dans les docs
OriginalL'auteur masarka