#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