停止java_如何优雅地停止java进程?

b89461d2baee4afa5be1f7b89d8b3ea9.png

隔江千里

好吧,在我选择使用“Java监控和管理” 概述之后的所有可能性之后,这允许您以相对简单的方式从另一个应用程序控制一个应用程序。您可以从脚本中调用控制应用程序,以便在杀死它之前正常地停止受控应用程序。这是简化的代码:受控应用程序:使用以下VM参数运行它:-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 9999 -Dcom.sun.management.jmxremote.authenticate = false -Dcom.sun.management。 jmxremote.ssl = FALSE//ThreadMonitorMBean.javapublic interface ThreadMonitorMBean{String getName();void start();void stop();boolean isRunning();}// ThreadMonitor.javapublic class ThreadMonitor implements ThreadMonitorMBean{private Thread m_thrd = null;public ThreadMonitor(Thread thrd){    m_thrd = thrd;}@Overridepublic String getName(){    return "JMX Controlled App";}@Overridepublic void start(){    // TODO: start application here    System.out.println("remote start called");}@Overridepublic void stop(){    // TODO: stop application here    System.out.println("remote stop called");    m_thrd.interrupt();}public boolean isRunning(){    return Thread.currentThread().isAlive();}public static void main(String[] args){    try    {        System.out.println("JMX started");        ThreadMonitorMBean monitor = new ThreadMonitor(Thread.currentThread());        MBeanServer server = ManagementFactory.getPlatformMBeanServer();        ObjectName name = new ObjectName("com.example:type=ThreadMonitor");        server.registerMBean(monitor, name);        while(!Thread.interrupted())        {            // loop until interrupted            System.out.println(".");            try             {                Thread.sleep(1000);            }             catch(InterruptedException ex)             {                Thread.currentThread().interrupt();            }        }    }    catch(Exception e)    {        e.printStackTrace();    }    finally    {        // TODO: some final clean up could be here also        System.out.println("JMX stopped");    }}}控制应用程序:使用stop或start作为命令行参数运行它public class ThreadMonitorConsole{public static void main(String[] args){    try    {           // connecting to JMX        System.out.println("Connect to JMX service.");        JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:9999/jmxrmi");        JMXConnector jmxc = JMXConnectorFactory.connect(url, null);        MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();        // Construct proxy for the the MBean object        ObjectName mbeanName = new ObjectName("com.example:type=ThreadMonitor");        ThreadMonitorMBean mbeanProxy = JMX.newMBeanProxy(mbsc, mbeanName, ThreadMonitorMBean.class, true);        System.out.println("Connected to: "+mbeanProxy.getName()+", the app is "+(mbeanProxy.isRunning() ? "" : "not ")+"running");        // parse command line arguments        if(args[0].equalsIgnoreCase("start"))        {            System.out.println("Invoke \"start\" method");            mbeanProxy.start();        }        else if(args[0].equalsIgnoreCase("stop"))        {            System.out.println("Invoke \"stop\" method");            mbeanProxy.stop();        }        // clean up and exit        jmxc.close();        System.out.println("Done.");        }    catch(Exception e)    {        // TODO Auto-generated catch block        e.printStackTrace();    }}}而已。:-)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值