简体   繁体   中英

Java - Tomcat: Reload context.xml without restarting server

I'm using spring mvc and tomcat as a server. I want to be able to change a jndi field that is Autowired(as String):

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

in one of the my services, that is referenced to conf/context.xml of Tomcat, that looks something like this:

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

However, when I change the value on context.xml, this change is not reflected on my service managed by spring, unless I restart server. Is there anyway to reflect this change without restarting or redeploying war? I know there is a solution to include such a dynamic field in one of properties file and then use commons configuration library to reload the changes, but I'm looking for a solution to keep this field on my conf/context.xml...

I think that is not possible. Why don't use a property file or a static class?

As far as I know, it's impossible if you put it into the conf/context.xml of your tomcat home as the following doc shows:

  • StandardContext.html#reload(): If the context.xml has changed, you should stop this Context and create (and start) a new Context instance instead. -- ie can't achieve by original context
  • Reload Existing App: Reload an existing web application, to reflect changes in the contents of /WEB-INF/classes or /WEB-INF/lib. -- ie not reflect the change of context.xml

But you can define your app's /META-INF/context.xml , which will be packed into war and you can replace war without restart server.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM