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

时间:2016-06-11 19:31:57

标签: spring spring-boot quartz-scheduler

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

代码:

@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;
    }

有什么想法吗?

0 个答案:

没有答案