否。需要重新启动。

否。需要重新启动。

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

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

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

答案1

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

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

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

更具体地说,它被描述在服务器启动.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.

这是在创建 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 上的示例操作

答案2

否。需要重新启动。

Tomcat 文档页面<Context>提及:

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

相关内容