有没有办法停止使用Java和JMX的Apache Tomcat?
我想有一个托管bean可以用于此吗?
通过它自己的Tomcat没有能够关闭运行的运行JMX
,基本上它不安全!但如果你真的需要它,你需要创建自己的ShutdownMBean
.MBean
在应用程序部署中创建和注册它是非常容易和直接的过程.让我们首先创建ShutdownMBean
具有名称的whch,并将公开单个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) { } } }
多数民众赞成,只需部署您的应用程序,使用连接到您的Tomcat JConsole
,您将doShutdown
在com.example
组下找到操作