使用 JMX 停止 Apache Tomcat
Stop Apache Tomcat using JMX
有什么方法可以使用 Java 和 JMX 来停止 Apache Tomcat 吗?
我想有一个可用于此的托管 bean?
Tomcat 本身并没有从 JMX
关闭操作 运行 的能力,基本上是不安全的!但是如果你真的需要它,你需要创建你自己的 ShutdownMBean
。创建 MBean
并在应用程序部署时注册它的过程非常简单直接。
让我们首先创建 ShutdownMBean
,它将具有名称并将公开单个 doShutdown()
操作。
public interface ShutdownMBean {
void doShutdown();
String getName();
}
实现也很简单,发送SHUTDOWN
信号到Tomcat的默认关闭端口即可。
public class Shutdown implements ShutdownMBean{
@Override
public void doShutdown() {
try {
Socket clientSocket = new Socket("localhost", 8005);
clientSocket.getOutputStream().write("SHUTDOWN".getBytes());
clientSocket.getOutputStream().close();
clientSocket.close();
} catch (IOException e) {
}
}
@Override
public String getName() {
return "Shutdown JMX Hook";
}
}
最后只需在上下文初始化后注册 ShutdownMBean
(我假设您使用的是 Tomcat 7+):
@WebListener
public class ShutdownListener implements javax.servlet.ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
ShutdownMBean shutdownMBean = new Shutdown();
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("com.example:type=Shutdown");
server.registerMBean(shutdownMBean, name);
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException | MalformedObjectNameException e) {
}
}
}
就是这样,只需部署您的应用程序,使用 JConsole
连接到您的 Tomcat,您将在 com.example
组
下找到 doShutdown
操作
有什么方法可以使用 Java 和 JMX 来停止 Apache Tomcat 吗?
我想有一个可用于此的托管 bean?
Tomcat 本身并没有从 JMX
关闭操作 运行 的能力,基本上是不安全的!但是如果你真的需要它,你需要创建你自己的 ShutdownMBean
。创建 MBean
并在应用程序部署时注册它的过程非常简单直接。
让我们首先创建 ShutdownMBean
,它将具有名称并将公开单个 doShutdown()
操作。
public interface ShutdownMBean {
void doShutdown();
String getName();
}
实现也很简单,发送SHUTDOWN
信号到Tomcat的默认关闭端口即可。
public class Shutdown implements ShutdownMBean{
@Override
public void doShutdown() {
try {
Socket clientSocket = new Socket("localhost", 8005);
clientSocket.getOutputStream().write("SHUTDOWN".getBytes());
clientSocket.getOutputStream().close();
clientSocket.close();
} catch (IOException e) {
}
}
@Override
public String getName() {
return "Shutdown JMX Hook";
}
}
最后只需在上下文初始化后注册 ShutdownMBean
(我假设您使用的是 Tomcat 7+):
@WebListener
public class ShutdownListener implements javax.servlet.ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
ShutdownMBean shutdownMBean = new Shutdown();
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("com.example:type=Shutdown");
server.registerMBean(shutdownMBean, name);
} catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException | MalformedObjectNameException e) {
}
}
}
就是这样,只需部署您的应用程序,使用 JConsole
连接到您的 Tomcat,您将在 com.example
组
doShutdown
操作