Spring внешние свойства контекста приложения?
У меня есть приложение Spring и его работоспособность до сих пор. Теперь я хочу, чтобы файл свойств во внешней папке конфигурации, а не в упакованном банке, менял вещи без необходимости переупаковки. Это то, что я получил:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- <property name="locations" value="classpath:/springcontext.properties"/> -->
<property name="locations" value ="config/springcontext.properties" />
Выделенный один работает, а другой - я не работаю:/Может кто-нибудь помочь?
Изменить:
спасибо 4 комментариев.
Возможно, мой вопрос не был достаточно ясным:). Я выполняю сборку Maven, и все будет упаковано, и я хочу, чтобы эта папка была НЕ в гайке упаковки рядом с выходящей банкой, и в этой папке я хочу файл свойств. возможно?
Ответы
Ответ 1
<context:property-placeholder location="classpath*:spring/*.properties" />
Если вы поместите его где-нибудь в путь к классам в каталоге с именем spring (соответственно измените имена /dirs ), вы можете получить доступ с помощью выше
<property name="locations" value ="config/springcontext.properties" />
это будет указывать на web-inf/classes/config/springcontext.properties
Ответ 2
Вы можете попробовать что-то вроде этого:
<context:property-placeholder
location="${ext.properties.dir:classpath:}/servlet.properties" />
И определите свойство ext.properties.dir
на вашем сервере приложений /jvm, в противном случае будет использоваться свойство свойств по умолчанию "classpath:/" (т.е. класс dir.jar или .war):
-Dext.properties.dir=file:/usr/local/etc/
BTW, очень полезный пост в блоге.
Ответ 3
Вы можете использовать префикс файла для загрузки файла контекста внешнего приложения.
<context:property-placeholder location="file:///C:/Applications/external/external.properties"/>
Ответ 4
Этот блог может вам помочь. Фокус в том, чтобы использовать язык выражений SpEL (spring), чтобы прочитать свойства системы, такие как user.home
, чтобы прочитать домашний каталог пользователя с помощью SpEL, вы могли бы использовать выражение
#{ systemProperties['user.home']}
внутри ваших элементов bean. Например, чтобы получить доступ к вашему файлу свойств, хранящемуся в вашем домашнем каталоге, вы можете использовать следующее в свой PropertyPlaceholderConfigurer, это сработало для меня.
<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>
Ответ 5
Этот вопрос старый, но хотел поделиться чем-то, что сработало для меня. Надеемся, что это будет полезно для людей, которые ищут некоторую информацию, получающую доступ к свойствам во внешнем местоположении.
Это то, что сработало для меня.
-
Содержимое файла свойств:
PROVIDER_URL=t3://localhost:8003,localhost:8004
-
applicationContext.xml
содержимое файла: (Spring 3.2.3)
Примечание: ${user.home}
является системным свойством от ОС.
<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}
было заменено значением в свойствах файла
Ответ 6
Один из способов сделать это - добавить свою внешнюю конфигурационную папку в путь к классам Java-процесса. То, как я часто делал это в прошлом.
Ответ 7
<context:property-placeholder location="file:/apps/tomcat/ath/ath_conf/pcr.application.properties" />
Это работает для меня.
Локальный путь машины разработки - C:\apps\tomcat\ath\ath_conf и в server/apps/tomcat/ath/ath_conf
Оба работают для меня