Fire Quartz ด้วยตนเองโดยตัวควบคุม Spring

ฉันใช้คลาสการกำหนดค่าต่อไปนี้เพื่อรวม Spring Framework เข้ากับ Quartz ซึ่งทำงานได้ดี แต่งานจะเริ่มแบบไดนามิกเมื่อแอปพลิเคชันเริ่มทำงานเนื่องจากฉันใช้คำอธิบายประกอบ @Configuration ฉันต้องการเริ่มงานด้วยตนเองโดยคอนโทรลเลอร์และ UI วิธี Fire Quartz ด้วยตนเองโดย Spring controller

คลาสการกำหนดค่าควอตซ์

@Configuration
public class QuartzConfig {

@Autowired
private PlatformTransactionManager transactionManager;

@Autowired
private ApplicationContext applicationContext;

@Bean
public SchedulerFactoryBean quartzScheduler() {
    SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean();

    quartzScheduler.setTransactionManager(transactionManager);
    quartzScheduler.setOverwriteExistingJobs(true);

    AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
    jobFactory.setApplicationContext(applicationContext);
    quartzScheduler.setJobFactory(jobFactory);

    Trigger[] triggers = {
            processMyJobTrigger().getObject()
    };

    quartzScheduler.setTriggers(triggers);

    return quartzScheduler;
}

@Bean
public JobDetailFactoryBean processMyJob() {
    JobDetailFactoryBean jobDetailFactory = new JobDetailFactoryBean();
    jobDetailFactory.setJobClass(HelloJob.class);
    jobDetailFactory.setDurability(true);
    return jobDetailFactory;
}

@Bean
public CronTriggerFactoryBean processMyJobTrigger() {
    CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
    cronTriggerFactoryBean.setJobDetail(processMyJob().getObject());
    cronTriggerFactoryBean.setCronExpression("0 0/1 * * * ?");
    return cronTriggerFactoryBean;
}

}

งานควอทซ์

@Service
@Transactional
public class HelloJob implements Job{

@Inject
TestrecordRepository testrecordRepository;
@Inject
ScoreRepository scoreRepository;


public void execute(JobExecutionContext context)
        throws JobExecutionException {
            System.out.println("Hello Quartz!");    
            List<Testrecord> records=testrecordRepository.findAll();
            for(Testrecord t:records){
                Testrecord testrecord = new Testrecord();
                testrecord.setValue_integer(t.getValue_integer());
                testrecord.setId(t.getId());
                RuleExecutor ruleExecutor = new RuleExecutor();
                Score score= ruleExecutor.processRules(testrecord);
                scoreRepository.save(score);    
            }

        }

}


person Ali-Alrabi    schedule 12.06.2015    source แหล่งที่มา


คำตอบ (1)


จากคอนโทรลเลอร์ คุณต้องเข้าถึง SchedulerFactoryBean จากนั้นใช้ scheduler และทริกเกอร์งานที่คุณต้องการ

Scheduler scheduler = (Scheduler)   getApplicationContext().getBean("schedulerFactoryBean");

scheduler.triggerJob(JobKey jobKey)
person michal    schedule 12.06.2015