我使用旧版本的石英(2.1.2)和弹簧3.1.0。 我有简单的配置,应该阻止并行作业执行:
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory">
<bean class="com.azdne.infrastructure.schedule.ScheduledMethodJobFactory" />
</property>
<property name="dataSource" ref="schedulerDataSource" />
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">scheduler-cluster</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.threadPool.threadCount">4</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
</props>
</property>
</bean>
&#39; THREADCOUNT&#39;设置为4,因为我有更多的工作要在预定的时间执行。 我还使用@DisallowConcurrentExecution注释我的工作类:
@Component
@DisallowConcurrentExecution
public class MyJob{
@Transactional(timeout=900)
@Scheduled(cron = "0 0 2 * * ?")
public void execute() {
... implementation goes here
}
}
可以从两个不同的服务器节点之一启动作业,这两个服务器节点使用相同的数据库进行配置和数据处理。不幸的是,我的任务有时从两个开始。示例应用程序日志:
NODE 1: task-executor.log.2017-05-16.gz:16/05/2017 02:00:00.068 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-3] INFO com.package.schedule.job.MyJob.execute - MyJob job - start
NODE 2: task-executor.log.2017-05-16.gz:16/05/2017 02:00:00.103 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1] INFO com.package.schedule.job.MyJob.execute - MyJob job - start
这是不寻常的情况。有时工作在两台机器上启动,有时只在一台机器上启动我检查了我的应用程序日志,并没有在数据处理过程中发现任何错误。有时工作开始之间的差距很小 - 毫秒,有时是秒。 我应该在哪里找错?我在配置中遗漏了什么吗?
答案 0 :(得分:2)