我有一个弹簧上下文,我这样运行:
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方法时 - 上下文打开并立即关闭。
在我手动关闭它之前,我有办法让它保持活着吗?
答案 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类可以成功使用它。