我要写一个石英调度程序来在Spring中运行一个作业。我还要添加另一个函数来暂停相同的工作。此代码存在于单个独立批处理中。
触发这两个功能: 1.开始工作 暂停工作 我用main()写了两个类来执行。
问题是当我触发pauseJob的main()时,它会启动不同的applicationContext而不是使用相同的applicationContext。我已经使用Singleton模式进行applicationContext初始化。
ApplicationContext初始化的Singleton类
public class AppContext {
private static ApplicationContext INSTANCE = null;
private AppContext() {
}
public static ApplicationContext getIntance() {
if (INSTANCE == null) {
String[] contexts = new String[] {"classpath:/applicationContext.xml"};
INSTANCE = new ClassPathXmlApplicationContext(contexts);
}
return INSTANCE;
}
}
开始工作的课程
公共类StartJobQuartzMain {public static void main(String[] args) throws Exception {
AppContext.getIntance();
}
}
暂停作业的类
公共类PauseJobQuartzMain {
public static void main(String[] args) throws Exception {
((TestPauseJob) AppContext.getIntance().getBean("testPauseJob")).pauseJob();
}
}
请指导我如何在PauseJobQuartzMain.java中获取相同的applicationContext实例。感谢。
答案 0 :(得分:1)
使它成为单例与它无关(它以某种方式需要)......两个'java'主类将彼此独立运行,因为它们是两个不同的程序,有它们自己的Java虚拟机,将无法彼此共享您的应用程序上下文。
您可以使用数据库或外部文件(两者都可访问)或其他东西来实现这一目标......
希望这会有所帮助......
答案 1 :(得分:1)
你不能从另一个主类那样做,因为你肯定是从一个新的JVM运行它。所以他们每个人都有自己的单身人士。您可以考虑在这两个应用程序之间使用一些共享资源:db,file,JMS queue finally等,或者您可以通过JMX调用某些托管操作。但是当应用程序上下文是其中之一时,两个JVM无法共享内存,尤其是Java对象。