web-dev-qa-db-fra.com

Propriétés externes du contexte d'application Spring?

j'ai une application Spring et ça fonctionne bien jusqu'à présent. Maintenant, je veux que le fichier de propriétés dans un dossier de configuration externe et non dans le fichier jar emballé pour changer les choses sans avoir besoin de remballer. C'est ce que j'ai eu:

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

Celui qui a perdu son emploi travaille et l'autre qui ne travaille pas:/Quelqu'un peut-il aider?

Edit: Thx 4 commentaires à ce jour.

Peut-être que ma question n'était pas assez claire :). J'effectue une construction Maven et tout sera emballé et je veux que ce dossier ne soit PAS dans l'écrou du paquet à côté du fichier JAR sortant et dans ce dossier je veux le fichier de propriétés. possible?

27
Dennis Ich
<context:property-placeholder location="classpath*:spring/*.properties" />

Si vous le placez quelque part dans le chemin de classe dans un répertoire nommé spring (changez les noms/répertoires en conséquence), vous pouvez accéder à

<property name="locations" value ="config/springcontext.properties" />

cela pointera vers web-inf/classes/config/springcontext.properties

11
fmucar

Vous pouvez essayer quelque chose comme ça:

<context:property-placeholder 
        location="${ext.properties.dir:classpath:}/servlet.properties" />

Et définissez la propriété ext.properties.dir dans votre serveur d'applications/jvm, sinon l'emplacement de propriétés par défaut "classpath: /" (c'est-à-dire les répertoires de classes de .jar ou .war) serait utilisé:

-Dext.properties.dir=file:/usr/local/etc/

BTW, très utile blog post .

45
masted

Vous pouvez utiliser le préfixe de fichier pour charger le fichier de contexte d'application externe, par exemple.

  <context:property-placeholder location="file:///C:/Applications/external/external.properties"/>
12
Prasanna Talakanti

This blog peut vous aider. L'astuce consiste à utiliser SpEL (Spring Expression Language) pour lire les propriétés système telles que user.home, pour lire le répertoire personnel de l'utilisateur à l'aide de SpEL, que vous pourriez utiliser. 
#{ systemProperties['user.home']} expression dans vos éléments de haricot. Par exemple, pour accéder à votre fichier de propriétés stocké dans votre répertoire de base, vous pouvez utiliser les éléments suivants dans votre PropertyPlaceholderConfigurer, cela a fonctionné pour moi.

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>file:#{ systemProperties['user.home']}/ur_folder/settings.properties</value>
    </property>
</bean>
10
Sridhar

Cette question est un peu ancienne, mais je voulais partager quelque chose qui a fonctionné pour moi. J'espère que cela sera utile pour les personnes qui recherchent des informations accédant à des propriétés situées à l'extérieur.

C'est ce qui a fonctionné pour moi.

  1. Contenu du fichier de propriété:

    PROVIDER_URL=t3://localhost:8003,localhost:8004
    
  2. Contenu du fichier applicationContext.xml: (Spring 3.2.3)

    Remarque: ${user.home} est une propriété système du système d'exploitation.

    <context:property-placeholder system-properties-mode="OVERRIDE" location="file:${user.home}/myapp/latest/bin/my-env.properties"/>
    
    <bean id="appsclusterJndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="Java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                <prop key="Java.naming.provider.url">${PROVIDER_URL}</prop>
            </props>
        </property>
    </bean>
    

${PROVIDER_URL} a été remplacé par la valeur dans les propriétés du fichier

5

Une façon de procéder consiste à ajouter votre dossier de configuration externe au chemin de classe du processus Java. C'est comme ça que je l'ai souvent fait par le passé.

2
pap
<context:property-placeholder location="file:/apps/Tomcat/ath/ath_conf/pcr.application.properties" />

Cela fonctionne pour moi . Le chemin de la machine de développement local est C:\apps\Tomcat\ath\ath_conf et dans serveur/apps/Tomcat/ath/ath_conf 

Les deux fonctionnent pour moi

1
fjkjava