繁体   English   中英

Spring:如何在应用程序的多个实例之一中锁定调度程序

[英]Spring: how to lock the scheduler in one of several instances of the application

我的应用程序有一个调度程序,它每 10 秒从数据库请求一次数据并对其进行处理。 我可以运行 2 个应用程序实例:第一个是不断运行的开发服务器,第二个是我的本地服务器。 两个实例都从同一个数据库中获取数据。 问题是当我在本地进行编辑并想要测试它们时,因为开发服务器正在运行,它可以在本地服务器之前拦截和处理我的数据。 这可能会发生多次,并且非常令人不安。 有什么办法可以让只有我的本地实例在调度程序中执行任务,而开发服务器只是跳过它? 我的意思是我需要我的本地调度程序每 10 秒按计划运行一次,并且开发服务器上的调度程序在我的本地实例运行时跳过了该任务。 可能吗? 或者有没有图书馆?

对此有许多可能的解决方案。 “最干净”的方法是将数据库分开,这样您的本地应用程序就不会连接到开发服务器的数据库,而是会维护一些在本地运行的数据库。

另一种可能的解决方案是将计划作业重构为仅在某种自定义配置上运行,以便在开发配置文件(您可能使用 spring 配置文件或代码中的“条件”)上,调度程序根本不会运行。 在开发服务器上,默认情况下会启用此配置,并且调度将照常运行。

例如,您可以使用这个

    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-spring</artifactId>
    </dependency>
    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-provider-jdbc-template</artifactId>
    </dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM