spring пытается загрузить переменную среды

#spring #spring-mvc

#spring #spring-mvc

Вопрос:

У меня есть вопрос о попытке ввести переменную среды в мой контроллер spring mvc.

У меня есть переменная среды следующим образом…

POS_MANAGER_SERVER_REPORTING=myserver

В моем контексте приложения spring у меня есть…

 <bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:systemPropertiesModeName="SYSTEM_PROPERTIES_MODE_OVERRIDE"
    p:searchSystemEnvironment="true"/>

<bean name="posManagerController"
    class="com.mycompany.reporting.controller.PosManagerController"
    p:posManagerServer="${POS_MANAGER_SERVER_REPORTING}" />     
  

Когда я не определяю системную переменную в websphere, приложение не запускается должным образом. Когда я добавляю переменную, это происходит. Но по какой-то причине значение, вводимое в мой контроллер, равно нулю.

Может кто-нибудь помочь мне с тем, что здесь может пойти не так? т. Е. Почему переменная среды загружается неправильно?

Просто чтобы дать вам дополнительную информацию, контроллер загружается в дочернем контексте (-servlet.xml ) с использованием аннотации @Controller, но в родительском контексте (applicationContext.xml ) У меня также есть контроллер, определенный так, как показано выше. Я понимаю, что spring достаточно умен, чтобы справиться с этим. Я перечислил эту информацию на всякий случай, если это может быть причиной проблемы.

Спасибо

Комментарии:

1. Можете ли вы показать posManagerServer часть вашего контроллера?

2. И почему у вас есть этот контроллер в обоих контекстах? Вы действительно должны сохранить только -servlet.xml часть и позаботиться об этом posManagerServer там (с @Value помощью или аналогично).

3. Андрей, с помощью @Value я могу получить системную переменную окружения?

4. Смотрите Мой комментарий из моего ответа ниже.

Ответ №1:

Цитата из документации:

Кроме того, BeanFactoryPostProcessors ограничены для каждого контейнера. Это актуально только в том случае, если вы используете иерархии контейнеров. Если вы определите BeanFactoryPostProcessor в одном контейнере, он будет применен только к определениям компонентов в этом контейнере. Определения компонентов в одном контейнере не будут обрабатываться BeanFactoryPostProcessors в другом контейнере, даже если оба контейнера являются частью одной и той же иерархии.

Итак, вам нужен PropertyPlaceholderConfigurer -servlet.xml файл in, чтобы заставить его работать.

Комментарии:

1. Вам нужно @Value("${POS_MANAGER_SERVER_REPORTING}") private String posManagerServer; в вашем PosManagerController и PropertyPlaceholderConfigurer в -servlet.xml