Quartz Scheduler 关闭后不停止

2023-11-23

我在 jboss 4.0.5 上使用当前最新的quartz 1.8.3。 石英作业是持久的并保存到本地数据库中。 当我在执行的石英调度程序对象上调用 shutdown 或standby 方法时 作业仍然由调度程序继续执行,只是作业状态为空并且执行失败。

我希望(至少根据quartz API文档)当我关闭或使调度程序处于待机状态时,先前调度到数据库中的作业将不会被执行。

如果在调度程序上调用 shutdown 或standby 不是实现这一目标的方法,那么什么是呢?

这些作业不仅完成了执行,而且还继续触发计划的作业。

以下是所询问的附加信息:

public class QuartzNotificationsSchedulerBean implements NotificationsScheduler, ServletContextAware {
...
public String scheduleNotification(Notification notification) {

        // Schedule the job with the trigger
        try {
            // Define job instance  

                String      groupName   = this.createNotificationGroupName(notification);
                String      triggerName = this.createNoficationTriggerName(notification);
                String      jobName     = this.createNoficationJobName(notification);
                JobDetail   job         = new JobDetail(jobName, groupName , ScheduledNotificationJob.class);

                JobDataMap jobDataMap = new JobDataMap();
                jobDataMap.putAll(notification.getContext());     
                job.setJobDataMap(jobDataMap);

                Calendar notificationTime = notification.getTime();    

                Trigger trigger = new SimpleTrigger(triggerName, groupName , notificationTime.getTime());

                scheduler.scheduleJob(job, trigger);        

                return trigger.getName();           
        } catch (SchedulerException e) {
            throw new NotificationScheduleException(e, notification);
        }

        return null;
    }

public void setServletContext(ServletContext servletContext) {      
        this.sf = (SchedulerFactory) servletContext.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY);

        try {
            scheduler =  sf.getScheduler();
            if(scheduler.isStarted() == false) {
                scheduler.start();
            }

        } catch (SchedulerException e) {        
            logger.error("Failed to load Quartz scheduler ", e);        
        }
    }
}

以下是quartz配置属性的副本:

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.instanceName = scheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.wrapJobExecutionInUserTransaction = true

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 45
org.quartz.threadPool.threadPriority = 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = FOR_QUARTZ
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000


#============================================================================
# Configure Datasources  
#============================================================================

org.quartz.dataSource.FOR_QUARTZ.jndiURL = java:jdbc/live-quartz

以下是 web.xml 中的一个片段,其中quartz 被初始化:

 <!--  START NOTIFICATION SERVICE -->
    <context-param>
        <param-name>config-file</param-name>
        <param-value>wm_quartz.properties</param-value>
    </context-param>
    <context-param>
        <param-name>shutdown-on-unload</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>start-scheduler-on-load</param-name>
        <param-value>true</param-value>
    </context-param>    

    <listener>
        <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
    </listener> 

Thanks


如果调用 shutdown 时有作业正在执行,是否中断这些作业取决于属性org.quartz.scheduler.interruptJobsOnShutdown.

See http://jira.terracotta.org/jira/browse/QTZ-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel。我无法找到更多关于此的文档。

另一个属性是org.quartz.scheduler.makeSchedulerThreadDaemon=true,一旦您的调用线程关闭,它将关闭quartz调度程序。我不知道工作状况会发生什么变化。

正如评论中提到的,发布一些代码和配置以获得明确的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quartz Scheduler 关闭后不停止 的相关文章

随机推荐

  • 在Python中计算*多*组地理坐标之间的距离

    我正在努力计算之间的距离multiple纬度和经度坐标集 简而言之 我发现了许多使用数学或几何学的教程 当我只想找到一组坐标 或两个唯一位置 之间的距离时 这些教程非常有用 然而 我的目标是扫描具有 400k 个起点和目的地坐标组合的数据集
  • 升级Android应用程序时报告ClassNotFoundException错误

    我看过很多关于 ClassNotFoundException 和 Android 的帖子 但我还没有找到我所经历的原因 我有一个应用程序 数据计数器小部件 在 Android 市场上 它的下载量超过 25 万次 每次我发布新版本时 我都会在
  • XMLHTTP onTimeOut 时如何使用 VBA 回调函数?

    我正在尝试从网络服务器获取 xml 数据到 Excel 然后我写了一个sendRequestexcel中调用的函数 sendRequest http abb com index php id 111 当网络服务器出现问题 无法连接或找不到时
  • 在 Apache 中记录 POST 数据的最佳方式?

    想象一下 您有一个站点 API 它接受带参数的 GET 请求或 POST 请求 例如 使用标准 url 编码 分隔的 POST 数据 形式的数据 如果你想记录和分析 API 调用 GET 请求会很容易 因为它们会在 apache 日志中 有
  • 使用某些属性/类在 Blazor Webassemble 中进行调试时未绑定断点

    我正在使用 VS 2019 16 8 4 开发模块化 blazor 应用程序 5 0 2 其结构如下 主要 解决方案 其中包括 RCL Wasm 项目启动应用程序 几个引用主 RCL 基本组件等 的 子 解决方案 其中包括 net5 库 模
  • MongoFactoryBean 和 SimpleMongoDbFactory 的区别

    我正在设置 MongoDB Spring MVC 应用程序并尝试使用 Service DAO 模式 我阅读了 Spring Data MongoDB 参考here 但我不明白 MongoFactoryBean 和 SimpleMongoDb
  • React Native `npm start` 出现 watchman 错误

    我第一次遇到这个问题 https github com facebook react native issues 10088 然后我按照这个解决方案来解决该问题 https github com facebook react native
  • Xamarin NSNotificatioCenter:如何获取正在传递的 NSObject?

    我正在尝试使用 NSNotificationCenter 将视图中的通知从我的应用程序发布到另一个视图 因此 在我的目标类中 我创建了观察者 如下所示 NSNotificationCenter DefaultCenter AddObserv
  • 如何使用 FtpWebRequest 正确断开与 FTP 服务器的连接

    我创建了一个 ftp 客户端 该客户端在一天中多次连接以从 FTP 服务器检索日志文件 问题是几个小时后我从 FTP 服务器收到一条错误消息 已达到 421 会话限制 当我使用 netstat 检查连接时 即使我已经 关闭 了连接 我也可以
  • 如何在 Windows 时区和 IANA 时区之间进行转换?

    如中所述时区标签 wiki 有两种不同风格的时区 Microsoft 提供的用于 Windows 和 Net 的内容TimeZoneInfo类 在 Windows 上运行时 由诸如以下的值标识 Eastern Standard Time 由
  • app:srcCompat - 矢量可绘制对象显示在设计预览中,但不显示在应用程序中

    可绘制 信息 xml
  • scipy logsumexp() 是否可以处理下溢挑战?

    scipy 有吗logsumexp 实现包括通过从每个元素中减去数组中找到的最大值来防止下溢的黑客 下面解释的 其中m maxval 您可以检查定义的源代码logsumexp here 请注意 有一个指向源的链接文档页面 你会看到的 a m
  • div滚动条宽度

    有没有一种简单的方法可以使用 javascript jquery 获取滚动条的宽度 我需要获取溢出的 div 的宽度 滚动条的宽度 谢谢 如果您使用 jquery 请尝试以下操作 function getScrollbarWidth var
  • 使用 HTML 更改浏览器顶部(favicon)

    使用 HTML 查看图像时 如何更改浏览器选项卡中显示的小图像 抱歉 我是编程新手 小图像就是我所说的 它被称为favicon 将 favicon ico 文件放在 www 根目录中并使用以下代码
  • 用于查找小数/浮点数的正则表达式?

    我需要一个十进制 浮点数字的正则表达式 例如 12 12 2 1236 32 123 333 和 12 00 或 12 00 或 123 123 以便在 javascript 和 jQuery 中使用 谢谢 可选地在开头匹配 或 后跟一个或
  • 如何让对话框样式的活动窗口填满屏幕?

    我正在使用一个带有对话框主题集的活动 并且我希望它是全屏的 我尝试了各种各样的方法 甚至通过 WindowManager 手动将窗口扩展到完整的宽度和高度 但没有任何效果 显然 对话框窗口 或具有对话框主题的活动 只会根据其内容扩展 但即使
  • 如何在 readthedocs 上记录 cython 函数

    On 阅读文档我不被允许编译cython扩展 是否可以配置sphinx为了从中提取文档字符串cython文件而不实际编译它们 thanks 我遇到了同样的问题 发现现在可以在 readthedocs 上编译 Cython 扩展 简短回答 可
  • “__cplusplus”宏扩展为什么?

    C 宏有什么作用 cplusplus包含并扩展到 有没有宏 cplusplus即使在最古老的 C 实现中 也始终包含并扩展为numeric value 使用安全吗 if cplusplus或者我们应该用它来代替 ifdef cplusplu
  • Mac 开发的 PyObjc 与 RubyCocoa:哪个更成熟?

    我一直想尝试一下 Ruby 或 Python 同时我也一直想做一些 Cocoa 编程 因此 我认为实现这两个目标的最佳方法是使用 Ruby 或 Python 到 Objective C 的桥梁 PyObjc 或 RubyCocoa 来开发一
  • Quartz Scheduler 关闭后不停止

    我在 jboss 4 0 5 上使用当前最新的quartz 1 8 3 石英作业是持久的并保存到本地数据库中 当我在执行的石英调度程序对象上调用 shutdown 或standby 方法时 作业仍然由调度程序继续执行 只是作业状态为空并且执