理想情况下,如果检测到更改,那么我想做的就是加载到新的 config 副本中,以便在数据库中对其进行更新,无需重新启动即可在应用程序中获取和更新它。
我试图在主机server.xml中添加 autodeploy = true ,并在context.xml中添加 reloadable = true 。但这都不起作用。
还有其他解决方案吗?我使用eclipse IDE,我的服务器是Tomcat。
我读到在上下文中添加内容将对此有所帮助。
<Context reloadable="true">
<!-- Default set of monitored resources -->
<WatchedResource>Config/Design/configs/globalconfig</WatchedResource>
但是这个仍然对我没有帮助。我是否以错误的方式给出了路径?我是从以下链接https://www.mulesoft.com/tcat/tomcat-reload中获得的
已编辑此外,我还尝试了在模块上自动重新加载,禁用和启用。并且还要注意一件事,我不想使用JRebel。
答案 0 :(得分:4)
如果我按问题的标题走
无需重新启动Tomcat即可更改配置/设置
我同意Jomcy Johny的观点,即也许需要对设计方法进行审查。继续上面的评论,也许您应该考虑将配置保留在容器之外。实现相同的方法有很多,Apache Zookeeper就是其中一个可能的方向。
在旁注中,Mule文档中提到的路径通常采用'WEB-INF / x / yz'或'/Dir0/config.file'的形式。
答案 1 :(得分:1)
可以将Web应用程序部署到正在运行的Tomcat服务器。
如果Host autoDeploy属性为“ true”,则Host将尝试根据需要动态地部署和更新Web应用程序,例如,如果将一个新的.WAR放入appBase中。为此,主机需要启用后台处理,这是默认配置。
autoDeploy设置为“ true”,并且运行的Tomcat允许:
以上是Apache tomcat的摘录,也是我从hot deploy获得的有关热部署的大多数一般想法
答案 2 :(得分:0)
当它们位于server.xml中时,重新加载上下文元素不太可能起作用,因为“ ...不重新启动Tomcat就无法重新加载... server.xml文件”。 您可以尝试的是在“ /META-INF/context.xml”[1]中创建一个文件,然后在其中添加上下文。
然后您可以使用新的上下文文件替换war文件,而无需重新启动服务器。
或者您可以根据需要对服务器重新启动进行编程。见[2]
来源:
[1] https://tomcat.apache.org/tomcat-8.5-doc/config/context#Defining_a_context
[2] Java - Tomcat: Reload context.xml without restarting server
答案 3 :(得分:0)
您可以编写脚本并将其作为服务在应用程序外部运行,以跟踪配置文件的上次修改时间,如果发生更改,请切换到Tomcat容器并运行以下命令(考虑操作系统为Linux) ):
source ~/.bashrc
(对于Windows,在更改环境变量并保存后立即完成。) 希望这会有所帮助。