Как получить переменную окружения tomcat в PropertyPlaceholderConfigurer - PullRequest
4 голосов
/ 05 ноября 2011

Я пытаюсь получить переменную окружения, указанную в Tomcat в server.xml в PropertyPlaceholderConfigurer, расположенном в моем файле jpa-spring.xml.

Пока что установка выглядит следующим образом:

Tomcat server.xml

<Environment description="Identifies the server environement" 
             name="server-env" 
             type="java.lang.String" 
             value="dev" />

Вход WebContent/META-INF/context.xml:

<Context>
    <ResourceLink name="server-env" global="server-env" type="java.lang.String"/>
</Context>

На который ссылаются в WebContent/WEB-INF/web.xml, например:

<resource-env-ref>
    <description>Identifies server environement</description>
    <resource-env-ref-name>server-env</resource-env-ref-name>
    <resource-env-ref-type>java.lang.String</resource-env-ref-type>
</resource-env-ref>

<!-- Spring Integration -->

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/config/jpa-spring.xml
</param-value>
</context-param>

И в /WEB-INF/config/jpa-spring.xml Я пытаюсь получить эту переменную в качестве замены:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>WEB-INF/config/db.${server-env}.properties</value>
        </list>
    </property>
</bean>

Это настройка, которую я собрал, используя информацию из нескольких статей, найденных в Интернете.

Однако я получаю сообщение об ошибке, подобное...

Could not resolve placeholder 'server-env' in [WEB-INF/config/db.${server-env}.properties] as system property: neither system property nor environment variable found
05 Nov 2011 14:45:13,385 org.springframework.web.context.ContextLoader
ERROR Context initialization failed

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/config/db.${server-env}.properties]

... при запуске tomcat.

Как правильно подойти к достижению того, что я ищу?

Я знаю, что этот вопросаналогично этому и этому вопросу.Однако я даже не мог понять это с помощью информации из этих ответов.

Ответы [ 2 ]

5 голосов
/ 05 ноября 2011

Вот мое предложение

  • С текущей настройкой будет действительно сложно прочитать свойство JNDI server-env и использовать его для загрузки файла свойств.
  • Как вы собрали приложение Spring (и PropertyPlaceholderConfigurer), Spring попытается найти свойство server-env сначала в среде ОС, а затем в свойствах системы java (передается из команды с использованием опции -D). Он не находит его ни в одном из этих мест и, следовательно, терпит неудачу.
  • Так что на данный момент самый простой выход сейчас - передать значение командной строки server-env вашего сервера приложений (где вы вызываете java; типичным синтаксисом будет -Dserver-env = dev). Я оставляю это вам, чтобы разобраться.
  • Если вышеописанная опция кажется немного сложной, другой более простой выход - установить переменную окружения с именем server-env в ее соответствующие значения (в Windows это set server-env=dev. Пожалуйста, проверьте это для документации ОС).
3 голосов
/ 05 ноября 2011

Эти Environment элементы настраивают JNDI. Получение значений из JNDI по умолчанию не поддерживается ни одним простым синтаксическим сахаром в Spring.

http://www.theserverside.com/news/thread.tss?thread_id=35474#179220

может дать вам несколько полезных идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...