如何从2个主要方法

时间:2018-01-03 01:08:29

标签: spring quartz-scheduler

我要写一个石英调度程序来在Spring中运行一个作业。我还要添加另一个函数来暂停相同的工作。此代码存在于单个独立批处理中。

触发这两个功能: 1.开始工作 暂停工作 我用main()写了两个类来执行。

问题是当我触发pauseJob的main()时,它会启动不同的applicationContext而不是使用相同的applicationContext。我已经使用Singleton模式进行applicationContext初始化。

  1. 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;
    }
    }
    
  2. 开始工作的课程

    公共类StartJobQuartzMain {

    public static void main(String[] args) throws Exception {
            AppContext.getIntance();        
    }
    }
    
  3. 暂停作业的类

    公共类PauseJobQuartzMain {

    public static void main(String[] args) throws Exception {
            ((TestPauseJob) AppContext.getIntance().getBean("testPauseJob")).pauseJob();    
    }
    }
    
  4. 请指导我如何在PauseJobQuartzMain.java中获取相同的applicationContext实例。感谢。

2 个答案:

答案 0 :(得分:1)

使它成为单例与它无关(它以某种方式需要)......两个'java'主类将彼此独立运行,因为它们是两个不同的程序,有它们自己的Java虚拟机,将无法彼此共享您的应用程序上下文。

您可以使用数据库或外部文件(两者都可访问)或其他东西来实现这一目标......

希望这会有所帮助......

答案 1 :(得分:1)

你不能从另一个主类那样做,因为你肯定是从一个新的JVM运行它。所以他们每个人都有自己的单身人士。您可以考虑在这两个应用程序之间使用一些共享资源:db,file,JMS queue finally等,或者您可以通过JMX调用某些托管操作。但是当应用程序上下文是其中之一时,两个JVM无法共享内存,尤其是Java对象。