Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Quartz调度程序:触发器执行时间不一致_Java_Spring_Triggers_Weblogic_Quartz Scheduler - Fatal编程技术网

Java Quartz调度程序:触发器执行时间不一致

Java Quartz调度程序:触发器执行时间不一致,java,spring,triggers,weblogic,quartz-scheduler,Java,Spring,Triggers,Weblogic,Quartz Scheduler,我有两个Java应用程序在Weblogic和Spring上使用Quartz 1.6.6(一个使用Spring v.2.5.4;另一个使用Spring v.3.1.1)。我的架构在Weblogic集群中有两个应用服务器 两个应用程序都设置了简单的触发器(使用org.springframework.scheduling.quartz.SchedulerFactoryBean,org.springframework.scheduling.quartz.SimpleTriggerBean和org.spr

我有两个Java应用程序在Weblogic和Spring上使用Quartz 1.6.6(一个使用Spring v.2.5.4;另一个使用Spring v.3.1.1)。我的架构在Weblogic集群中有两个应用服务器

两个应用程序都设置了简单的触发器(使用
org.springframework.scheduling.quartz.SchedulerFactoryBean
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.JobDetailBean
)。它们都设置为每60秒运行一次

我已经向相关的
org.springframework.scheduling.quartz.QuartzJobBean
(在
executeInternal()
方法的开始处)添加了日志记录,该方法写入进程执行的时间

我发现时间是不一致的——有时一分钟的执行不会发生。示例:

应用程序1有一个触发进程,该进程在以下时间执行:

14:26:26,098
14:28:26,089
14:31:26,096
14:33:26,093
14:35:26,095
14:36:26,098
14:38:26,103
14:40:05,951 (trigger 1)
14:41:05,951 (trigger 2)
14:42:05,943 (trigger 1)
14:43:05,954 (trigger 2)
14:44:05,937 (trigger 1)
14:45:05,956 (trigger 2)
14:46:05,953 (trigger 2)
14:47:05,937 (trigger 1)
14:48:05,941 (trigger 1)
14:49:05,939 (trigger 1)
14:50:05,951 (trigger 2)
应用程序2有两个触发进程,分别在以下时间执行:

14:26:26,098
14:28:26,089
14:31:26,096
14:33:26,093
14:35:26,095
14:36:26,098
14:38:26,103
14:40:05,951 (trigger 1)
14:41:05,951 (trigger 2)
14:42:05,943 (trigger 1)
14:43:05,954 (trigger 2)
14:44:05,937 (trigger 1)
14:45:05,956 (trigger 2)
14:46:05,953 (trigger 2)
14:47:05,937 (trigger 1)
14:48:05,941 (trigger 1)
14:49:05,939 (trigger 1)
14:50:05,951 (trigger 2)
如果我关闭一个Weblogic应用程序服务器,那么这两个应用程序每分钟都会非常愉快地运行它们的所有作业

我已经检查了所有作业的数据库表和
QRTZ\u简单\u触发器。重复间隔
是正确的(60000毫秒)。
QRTZ\u触发器。上一次点火时间
QRTZ\u触发器。下一次点火时间
之间的差异也是60000

应用程序上下文文件中的My
quartzProperties
定义包含以下条目:

<property name="quartzProperties">
    <props>
        <prop key="org.quartz.scheduler.instanceName">MyClusteredScheduler</prop>
        <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
        <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
        <prop key="org.quartz.threadPool.threadCount">5</prop>
        <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
        <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
        <prop key="org.quartz.jobStore.isClustered">true</prop>
        <prop key="org.quartz.jobStore.clusterCheckinInterval">5000</prop>
        <prop key="org.quartz.jobStore.dataSource">myDS</prop>
        <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
        <prop key="org.quartz.dataSource.myDS.driver">oracle.jdbc.driver.OracleDriver</prop>
        <prop key="org.quartz.dataSource.myDS.URL">{db connection string}</prop>
        <prop key="org.quartz.dataSource.myDS.user">{username}</prop>
        <prop key="org.quartz.dataSource.myDS.password">{password}</prop>
        <prop key="org.quartz.dataSource.myDS.maxConnections">5</prop>
        <prop key="org.quartz.dataSource.myDS.validationQuery">select 0 from dual</prop>
    </props>
</property>

MyClusteredScheduler
自动的
org.quartz.siml.SimpleThreadPool
5.
org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
真的
5000
myDS
QRTZ_
oracle.jdbc.driver.OracleDriver
{db连接字符串}
{username}
{密码}
5.
从双通道中选择0

你有没有想过为什么会这样?提前感谢。

似乎已修复:问题更多地与依赖不一致的日志消息来建议不一致的触发时间有关,而不是与Quartz有关。

在运行两组调度程序时,您是否有机会检查数据库上是否有未释放的锁?您的工作是否在1分钟内完成?因为quartz作业是有状态的,因此不会有2个并行作业安装。另外,考虑增加线程数。谢谢你的想法。1) 不确定我会检查数据库的内容;我可以确认QRTZ_触发器。触发器_状态主要是等待,每分钟采集几秒钟。2) 是的,作业在60秒内完成得很好。3) 将增加线程数并返回报告。我们已将org.quartz.threadPool.threadCount增加到50并重新部署,但这没有什么区别-仍然存在不一致的运行时间。我注意到的一点是,数据库表每分钟都在更新,就像作业每60秒运行一次一样,但我没有看到日志被更新(从QuartzJobBean的executeInternal()方法记录)。将isclustered值设置为false后是否可以重试。我猜将其指定为clustered会使quartz作业共享运行时/负载