【问题标题】:change in configuration/setting without restarting Tomcat在不重新启动 Tomcat 的情况下更改配置/设置
【发布时间】:2019-11-06 16:16:23
【问题描述】:

理想情况下,如果检测到更改,我希望能够在 config 的新副本中加载,以便在数据库中更新它时,它无需重新启动即可在应用程序中获取和更新。

我尝试在 host、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。

【问题讨论】:

    标签: java tomcat server config restart


    【解决方案1】:

    如果我按照问题的标题进行

    在不重启 Tomcat 的情况下更改配置/设置

    我同意 Jomcy Johny 的观点,即可能需要对设计方法进行审查。继续上述评论,也许您应该考虑将配置保留在容器之外。有很多方法可以实现,一个可能的方向是Apache Zookeeper

    在旁注中,Mule 文档中提到的路径通常格式为“WEB-INF/x/yz”或“/Dir0/config.file”。

    【讨论】:

    • 我的配置在我的容器之外。我还不知道这个。 :(
    【解决方案2】:

    可以将 Web 应用程序部署到正在运行的 Tomcat 服务器。

    如果 Host autoDeploy 属性为“true”,Host 将尝试根据需要动态部署和更新 Web 应用程序,例如,如果将新的 .WAR 放入 appBase 中。为此,主机需要启用后台处理,这是默认配置。

    autoDeploy 设置为“true”并且正在运行的 Tomcat 允许:

    • .WAR 文件的部署复制到主机 appBase。
    • 部署已复制到 托管 appBase。
    • 重新部署已部署的 Web 应用程序 当提供新的 .WAR 时,来自 .WAR。在这种情况下,爆炸 Web 应用程序被删除,.WAR 再次展开。注意 如果主机配置为 .WARs,则不会发生爆炸 不会在 unpackWARs 属性设置为“false”的情况下展开,其中 如果 Web 应用程序将被简单地重新部署为压缩文件 存档。
    • 如果 /WEB-INF/web.xml 文件(或 任何其他定义为 WatchedResource 的资源)都会被更新。 如果 Context Descriptor 文件存在,则重新部署 Web 应用程序 已更新已部署 Web 应用程序的位置。
    • 如果上下文描述符文件(带有 与先前的 Context 路径对应的文件名 已部署的 Web 应用程序)添加到 $CATALINA_HOME/conf/[enginename]/[hostname]/ 目录。
    • 如果 Web 应用程序的文档库 (docBase) 为 删除。请注意,在 Windows 上,这假定防锁定 功能(请参阅上下文配置)已启用,否则未启用 可以删除正在运行的 Web 应用程序的资源

    以上是来自Apache tomcat的sn-p,也是我从hot deploy获得的关于热部署的大部分总体思路

    【讨论】:

    • 谢谢 Django。我得到的最近的答案是这个。所以我给你赏金。
    【解决方案3】:

    重新加载位于 server.xml 中的 Context 元素不太可能工作,因为“如果不重新启动 Tomcat,就无法重新加载 ...server.xml 文件”[1]。 您可以尝试在“/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

    【讨论】:

    • 它并不理想,但希望它是一个开始。
    • 目前,如果配置更改(例如 abc.properties 等)需要重新启动 Tomcat,因为这些设置大部分是存储和静态属性。我认为最好更改实现,以便设置更改在一分钟内生效而无需重新启动。这是我的担忧。我的配置数据在应用程序之外并在运行时调用。
    【解决方案4】:

    您可以编写脚本并将其作为应用程序外部的服务运行,以跟踪配置文件的上次修改时间,以防发生更改,切换到 Tomcat 容器并运行以下命令(考虑到操作系统是 Linux ):

    source ~/.bashrc
    

    (在 Windows 的情况下,只要您更改环境变量并保存,它就完成了。) 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2012-01-28
      • 2010-09-15
      • 2011-07-10
      • 2016-05-31
      相关资源
      最近更新 更多