当前位置: 首页 > 知识库问答 >
问题:

如何从两个主要方法访问同一个ClassPathXmlApplicationContext实例

嵇丰
2023-03-14

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

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

问题是当我触发pauseJobs的main()时,它会启动不同的应用程序上下文,而不是使用相同的应用程序上下文。

>

  • 用于Application Context初始化的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中获取相同的applicationContext实例。JAVA谢谢

  • 共有2个答案

    郭知
    2023-03-14

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

    扈高逸
    2023-03-14

    让它成为单身与此无关(这在某种程度上是必需的)。。。这两个“java”主类将彼此独立运行,如中所示,它们是两个不同的程序,具有各自的java虚拟机,并且不能彼此共享应用程序上下文。

    您可以使用数据库或外部文件(两者都可以访问)或其他方法来实现这一点。。。

    希望这有助于...

     类似资料:
    • 我对Spring框架有点陌生。我有一个用Spring (4.2.1)编写的web应用程序。我正在尝试使用千分尺库来揭示度量标准,并将与普罗米修斯一起使用。 应用程序的相关结构如下: -核心模块(JAR) -webservice模块(WAR) 我创建了一个PrometheusService类,它是在核心模块中定义的bean。bean中定义的是和: 我创建了指标资源,它是一个公开 /Metrics e

    • 例如,我有两个心率监视器与我的平板电脑配对。我正在使用这样的代码来获取HRM设备列表: 然后,我在GUI中显示一个列表框,其中包含从设备[I]获取的设备名称。名称例如,我选择索引为0的设备。然后我可以访问it人力资源服务和人力资源管理特征: 除了心率,我还需要电池状态。如何访问同一(已选择)设备的电池服务?

    • 问题内容: 我试图尽可能简化我的困境。我有三节课: Α: Beta: 主要: 我希望我不要过分简化。我的问题是如何从Alpha中的方法访问cBeta.DoSomethingBeta()? 问题答案: 你需要以某种方式为Alpha类提供对cBeta的引用。有三种方法可以做到这一点。 1)在构造函数中为Alphas提供Beta。在Alpha课堂上写道: 并从main()调用cAlpha = new A

    • 在下面的代码中,我想将驱动程序从main方法访问到同一类中的另一个方法。要清除错误,我将WebDriver=newfirefoxdriver();里面有另一种方法吗??。请帮帮我。提前感谢您抽出时间

    • 有没有减少代码冗余的方法?

    • 我有一个大型java应用程序,在不同的类中有5个主要方法。我想将此应用程序作为docker容器运行。从DockerHub OpenJDK映像中,我启动了Dockerfile,如下所示 我想添加行来运行主要方法。没有Docker,我使用下面的行运行应用程序 是否可以在一个docker容器中运行上述场景?如果可能,当Dockerfile中只能有一条和指令时,如何实现这一点?