Fire Quartz secara manual Dengan pengontrol Spring

Saya menggunakan kelas konfigurasi berikut untuk mengintegrasikan kerangka pegas dengan Quartz, Ini berfungsi dengan baik, tetapi pekerjaan diaktifkan secara dinamis setelah aplikasi dimulai karena saya menggunakan anotasi @Configuration, saya ingin menjalankan pekerjaan secara manual dengan pengontrol dan ui. Bagaimana cara menembakkan Quartz secara manual dengan pengontrol Spring?

Kelas konfigurasi kuarsa

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

}

Pekerjaan kuarsa

@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 sumber


Jawaban (1)


Dari pengontrol Anda perlu mendapatkan akses ke SchedulerFactoryBean, lalu ambil scheduler dan picu pekerjaan yang Anda suka.

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

scheduler.triggerJob(JobKey jobKey)
person michal    schedule 12.06.2015