当触发器在石英中更新时,作业不会立即重新计划



我正在尝试使用Quartz开发一个spring应用程序,该应用程序从数据库中读取作业的触发时间并运行它。我已经设法成功地实现了这个场景。但是,在作业执行期间,当我更新数据库中的触发时间时,它不会根据新时间运行触发器作业,而是始终运行旧时间。

法典:

@Configuration 
@ComponentScan
public class QuartzConfiguration {
    @Bean
    public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean() {
        MethodInvokingJobDetailFactoryBean obj = new MethodInvokingJobDetailFactoryBean();
        obj.setTargetBeanName("jobone");
        obj.setTargetMethod("myTask");
        return obj;
    }
    @Autowired
    public TestModelRepository testModelRepository;

    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean(){
        JobDetailFactoryBean factory = new JobDetailFactoryBean();
        factory.setJobClass(MyJobTwo.class);
        TestModel result = testModelRepository.findOne((long) 1);
        factory.setGroup("mygroup");
        factory.setName("myjob");
        return factory;
    }
    public TestModelRepository getTestModelRepository() {
        return testModelRepository;
    }
    public void setTestModelRepository(TestModelRepository testModelRepository) {
        this.testModelRepository = testModelRepository;
    }
    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(){
        CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean();
        stFactory.setJobDetail(jobDetailFactoryBean().getObject());
        //stFactory.setStartDelay(3000;
        stFactory.setName("mytrigger");
        stFactory.setGroup("mygroup");
         TestModel result = testModelRepository.findOne((long) 1);
        stFactory.setCronExpression(result.getCronTime());
        return stFactory;
    }
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
        scheduler.setTriggers(cronTriggerFactoryBean().getObject());

        return scheduler;
    }

}

工作:

@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class MyJobTwo extends QuartzJobBean {
    public static final String COUNT = "count";
    private static URI jiraServerUri = URI.create("");
    JiraRestClient restClient = null;
    private String name;
    protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {

             final AsynchronousJiraRestClientFactory factory = new AsynchronousJiraRestClientFactory();
                restClient = factory.createWithBasicHttpAuthentication(jiraServerUri,"", "");

        }

    public void setName(String name) {
        this.name = name;
    }

知道吗?

以防

万一有人需要解决方案。

SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
scheduler.setOverwriteExistingJobs(true);

最新更新