2016-01-28 4 views
0

Я использую Spring mvc и tomcat как сервер. Я хочу, чтобы иметь возможность изменить JNDI поле, которое Autowired (как строка):Java - Tomcat: Reload context.xml без перезапуска сервера

<jee:jndi-lookup id="someMessage" jndi-name="someMessage"/> 

в одном из моих услуг, на который ссылается на Conf/context.xml из Tomcat, который выглядит примерно так:

<Environment name="someMessage" value="Change this." type="java.lang.String" />. 

Однако, когда я изменить значение на context.xml, это изменение не отражается на моей службе удалось весной, если я не перезапустить сервер. В любом случае, чтобы отразить это изменение без перезапуска или передислокации войны? Я знаю, что есть решение включить такое динамическое поле в один из файлов свойств, а затем использовать библиотеку конфигурации сообщества, чтобы перезагрузить изменения, но я ищу решение, чтобы сохранить это поле в моем conf/context.xml ...

+1

Является ли ваш context.xml в META-INF в вашем webapp или в корне Tomcat? Если он находится в вашем webapp, вы можете установить перезагрузку - см. [Контекстные документы] (https://tomcat.apache.org/tomcat-8.0-doc/config/context.html) в поле «перезагружаемое» и взорванная WAR будет изменен. Но, как говорят документы, это довольно дорого. Вы также можете установить его на уровне виртуального хоста и перезагрузить только этот виртуальный хост/webapp. – stdunbar

+0

Это на корне Tomcat. Перезагрузка - это дорогостоящий способ сделать это, хотя это решение. –

ответ

0

Я думаю это невозможно. Почему бы не использовать файл свойств или статический класс?

+0

Ребята, которые заботятся о серверах, уже знают, как работать с context.xml, и «проще» сказать им изменить там свойство, а затем, например, пойти в conf/webapps/whatever/WEB-INF (или META-INF) и найдите файл определенных свойств, чтобы изменить его там. Это конфиденциальная информация, поэтому я бы не хотел ставить ее в статический класс и работать с ней (сделать вызов для нее или что-то еще). Но если нет другого пути, похоже, что конфигурация сообщества и помещение его в файл свойств - это тот, с которым мне придется идти. –

+0

Извините, у меня нет другого предложения для вас ... – Melknix

0

Насколько я знаю, это невозможно, если вы поместите его в conf/context.xml вашего кота дома, как следующий документ показывает:

  • StandardContext.html#reload(): Если context.xml изменилось, вы должны остановить этот контекст и вместо этого создайте (и запустите) новый экземпляр контекста. - то есть не удается достичь по исходному контексту
  • Reload Existing App: Обновить существующее веб-приложение, чтобы отразить изменения в содержимом/WEB-INF/classes или/WEB-INF/lib. - т.е. не отражает изменение context.xml

Но вы можете определить свои приложения /META-INF/context.xml, которые будут упакованы в войну, и вы можете заменить войну без перезагрузки сервера.

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