如何从2个主要方法访问相同的ClassPathXmlApplicationContext实例

问题描述 投票:0回答:2

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

要触发这两个功能:1。启动作业2.暂停作业我用main()编写2个类来执行。

问题是当我触发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(); } }

请指导我如何在PauseJobQuartzMain.java中获取相同的applicationContext实例。谢谢。

spring quartz-scheduler
2个回答
1
投票

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

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

希望这可以帮助...


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.