簡體   English   中英

使用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操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM