如何让春天的环境保持活力

时间:2016-03-06 13:26:18

标签: java spring jmx

我有一个弹簧上下文,我这样运行:

public static void main(String[] args) {

    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
            new String[]{"classpath*:db-utils.appcontext.xml"});

    ctx.registerShutdownHook();
}

db-utils.appcontext.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="jmxDbUpdateUtils" class="maintain.dbutils.JmxDbUpdateUtils" >
        <property name="genericDao" ref="genericDao" />
    </bean>
    ....
</beans>

JmxDbUpdateUtils类有一个JMX方法,我想在任何时候执行它。

但是,当我执行我的main方法时 - 上下文打开并立即关闭。

在我手动关闭它之前,我有办法让它保持活着吗?

1 个答案:

答案 0 :(得分:2)

您必须定义您的类,以便主要线程不会终止,直到您强制它。此代码可以帮助您实现此要求:

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Primary {
    // public static ClassPathXmlApplicationContext ctx = new
    // ClassPathXmlApplicationContext(
    // new String[] { "classpath*:db-utils.appcontext.xml" });
    public static int i = 1;

    public static void main(String[] args) throws InterruptedException {
        Thread.sleep(Long.MAX_VALUE);
    }
}

此类只创建一个上下文,并且可以使用Long.MAX_VALUE毫秒(292471208年)。 辅助课使用小学班级数据。

public class Secondary {
    public static void main(String[] args){
         System.out.println(Main.i);
        }
}

虽然Primary类的线程没有死,但是Secondary类可以成功使用它。