在 Tomcat 中编辑“server.xml”而不重启服务器?

Bas*_*que 12 configuration tomcat

我编辑了 Tomcat 8conf文件夹中的“server.xml”文件。我Host为一个新网站添加了一个新标签。

我必须重新启动 Tomcat 服务器吗?

我可以让 Tomcat 解析并应用新编辑的server.xml吗?

daw*_*wud 15

我首先要说这个问题没有完全正确地提出,因为很有可能在不重新启动 Tomcat 的情况下实际编辑文件,但是正在运行的进程会忽略这些更改。

真正的问题是如何在server.xml不重新启动 Tomcat 的情况下应用更改。

从Tomcat 在线文档的启动过程类加载器页面收集信息,可以更详细地了解这一点。

更具体地说,在serverStartup.txt启动过程UML图中有描述,相关部分可以总结如下:

Sequence 1. Start from Command Line
  ...
Sequence 2. Process command line argument (start, startd, stop, stopd)
Class: org.apache.catalina.startup.Bootstrap (assume command->start)
What it does:
a) Catalina.setAwait(true);
b) Catalina.load()
    b3) createStartDigester()
        Configures a digester for the main server.xml elements
    b4) Load the server.xml and parse it using the digester
        Parsing the server.xml using the digester is an automatic
        XML-object mapping tool, that will create the objects defined
        in server.xml
        Startup of the actual container has not started yet.
    b6) Calls initialize on all components, this makes each object
        register itself with the JMX agent.
Run Code Online (Sandbox Code Playgroud)

这发生在创建 servlet 引擎 (Catalina) 的 Bootstrap 类加载器之后。

有了这些信息,现在很清楚在启动过程中何时server.xml解析文件,但它并没有真正回答为什么需要重新启动 Tomcat 以将更改应用于此文件的问题。

答案是它的某些部分可以在运行时使用 JMX动态修改。为此,必须注册适当的 MBean(上面的 b6 步骤),并且还必须接受 SET 操作(某些 MBean 只有一个 GET 接口)。

在您的特定情况下,无法在运行时创建和注册新主机,因为没有提供它,这就是您必须重新启动 Tomcat 进程以使 Bootstrap 类加载器实例化该对象并将其注册的原因JMX 代理。

之后,可以从 JMX 客户端(例如jconsole与任何 JDK 捆绑在一起的)修改该主机。

将您连接jconsole到启用了 JMX 的 Tomcat 并浏览 Host MBean 以检查所有可用属性:

jconsole 显示 Host MBean 的属性

并检查所有可用的操作(其中之一作为示例如下所示):

jconsole 显示了 Host MBean 上的示例操作


Bas*_*que 9

否。需要重新启动。

<Context>提及的 Tomcat 文档页面:

...如果不重新启动 Tomcat,则无法重新加载主 conf/server.xml 文件。