2013-09-09 3 views
2

Я пытаюсь экстернализация конфигурации с помощью пружины, но не могу заставить его работать правильно ..Как экстернализировать конфигурацию весной?

Вот что я сделал до сих пор:

создать файл свойств внутри файла войны (SRC/тест/ресурсов /) для каждой среды. Например: nonprod-key.properties & prod-key.properties с содержанием примерно так:

key.name=NameOfPrivateKey.pfx 
    key.password=JustAPasswordForPrivateKey 

Тогда в моей JBoss-cxf.xml, я хотел бы, чтобы прочитать выше значение следующим образом:

<import resource="#{systemProperties['environment']}-key.properties" /> 

    <http:conduit name="*.http-conduit"> 
     <http:tlsClientParameters 
      secureSocketProtocol="SSL"> 
      <sec:keyManagers keyPassword="${key.password}"> 
       <sec:keyStore type="PKCS12" password="${key.password}" resource="${key.name}" /> 
      </sec:keyManagers> 
      ... ... ... 
     </http:tlsClientParameters> 
    </http:conduit> 

И тогда в затмении, бегите конфигурации -> Аргументы -> VM Аргументы

-Denvironment=nonprod 

К сожалению, выше не работает. :(

Я получаю сообщение об ошибке:

class path resource [#{systemProperties['environment']}-key.properties] cannot be opened because it does not exist 

Я пытался использовать предложение от сюда:. http://forum.springsource.org/showthread.php?98988-Access-external-properties-file-from-SPRING-context-file&p=332278#post332278

Но не могу заставить его работать Что я делаю неправильно ? Может кто-то пожалуйста, дайте пример/образец, как лучше всего сделать это осуществить.

Спасибо.

-SGB

+0

Очевидно, что шаблон не может быть преобразован в надлежащее имя ресурса. Рассмотрите возможность использования профилей вместо вашего метода. –

+0

hmm .. у вас есть пример кода, который я могу использовать? Похоже, это должно быть возможно по этой ссылке: http: // forum.springsource.org/showthread.php?98988-Access-external-properties-file-from-SPRING-context-file&p=332278#post332278? – SGB

+0

Я бы предположил, что для этого вам нужен «PropertyPlaceholderConfigurer». Рассмотрим [это] (http://java.dzone.com/articles/using-spring-profiles-xml) –

ответ

2

Я считаю, что нужно использовать Spring 3.1.x для использования профилей. Мы еще не ....

В любом случае, окончательное решение, которое, кажется, работает для нас является использование:

<context:property-placeholder location="classpath:${environment}-key.properties"/> 

вместо

<import resource="#{systemProperties['environment']}-key.properties" /> 

Все остальное такое же, как указано в моем исходное сообщение (вопрос).

Надеюсь, что кто-то посчитает это полезным.

SGB

0

Вы можете использовать Property Place Holder. Если вам нужна гибкая конфигурация, например. Конфигурация по умолчанию хранится в вашей войне, которая может быть перекрытая внешней конфигурации, вы можете использовать непосредственно PropertyPlaceholderConfigurer боб, как:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:ignoreResourceNotFound="true"> 
    <property name="locations"> 
     <array> 
      <bean class="org.springframework.core.io.ClassPathResource" c:path="${environment}-key.properties"/> 
      <bean class="org.springframework.core.io.FileSystemResource" c:path="relative/path"/> 
     </array> 
    </property> 
</bean> 

путь атрибуты могут использоваться SPEL, например, ссылки на свойство или системной переменной ENV.

Посмотрите на эту article и это how to read System environment variable in Spring applicationContext

Смежные вопросы