【问题标题】:Quartz @DisallowConcurrentExecution not working on Spring BatchQuartz @DisallowConcurrentExecution 在 Spring Batch 上不起作用
【发布时间】:2022-10-25 19:57:31
【问题描述】:

我正在尝试使用 @DisallowConcurrentExecution 运行作业,但它似乎不起作用。 有谁能够帮我 ? 这是我的代码。

----------> QuartzConfig.java
    @Bean
    public JobDetail processJobDetail() {
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("jobName", "processJob");
        jobDataMap.put("jobLauncher", jobLauncher);
        jobDataMap.put("jobLocator", jobLocator);
        return JobBuilder.newJob(CustomQuartzJob.class)
                .withIdentity("processJob")
                .setJobData(jobDataMap)
                .storeDurably()
                .build();
    }
    @Bean
    public Trigger processTrigger() {
        return TriggerBuilder.newTrigger()
                .forJob(processJobDetail())
                .withIdentity("processJobTrigger")
                .withSchedule(SimpleScheduleBuilder
                        .simpleSchedule()
                        .withIntervalInSeconds(30)
                        .repeatForever())
                .build();
    }
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
        SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
        scheduler.setTriggers(processTrigger());
        scheduler.setQuartzProperties(quartzProperties());
        scheduler.setJobDetails(processJobDetail());
        return scheduler;
    }

-----> ProcessJobConfig.java 

@DisallowConcurrentExecution
public class ProcessJobConfig {
    private final JobBuilderFactory jobBuilderFactory;
    private final StepBuilderFactory stepBuilderFactory;
    @Bean
    public Job processJob() throws Exception {
            return jobBuilderFactory
                .get("processJob")
                .start(updateJobPartitionerStep())
                .build();
    }

执行时仍在同时启动作业 有人可以告诉我我做错了什么吗?请

【问题讨论】:

  • 我刚刚发现我们正在使用多线程运行:org.quartz.threadPool.threadCount = 10

标签: spring-batch quartz-scheduler


【解决方案1】:

以下是 Quartz 可能忽略 @DisallowConcurrentExecution 的一些可能原因

  • Quartz 属性 org.quartz.jobStore.isClustered 未设置为 true

    true 在 Spring-Boot 中不是默认值! 您必须提供此石英属性。例如,通过 application.properties:

    spring.quartz.properties.org.quartz.jobStore.isClustered=true
    
  • 如果您通过标准 Spring 集成创建作业,则元数据将仅在 QRTZ_JOB_DETAILS 中存储一次。如果稍后添加注解,IS_NONCONCURRENT 将不会更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2012-11-24
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多