Java 使用弹簧控制器手动运行石英
我使用以下配置类将spring framework与Quartz集成,它工作正常,但一旦应用程序启动,作业就会动态启动,因为我使用@configuration annotation,我想通过控制器和ui手动启动作业,有人能告诉我如何做吗 这是石英配置类Java 使用弹簧控制器手动运行石英,java,spring,spring-mvc,quartz-scheduler,Java,Spring,Spring Mvc,Quartz Scheduler,我使用以下配置类将spring framework与Quartz集成,它工作正常,但一旦应用程序启动,作业就会动态启动,因为我使用@configuration annotation,我想通过控制器和ui手动启动作业,有人能告诉我如何做吗 这是石英配置类 @Configuration public class QuartzConfig { @Autowired private PlatformTransactionManager transactionManager; @Autowired p
@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);
}
}
@服务
@交易的
公共类HelloJob实现作业{
@注入
TestrecordRepository TestrecordRepository;
@注入
记分库记分库;
public void execute(作业执行上下文)
抛出JobExecutionException异常{
System.out.println(“Hello Quartz!”);
List records=testrecordRepository.findAll();
for(Testrecord t:records){
Testrecord Testrecord=新的Testrecord();
testrecord.setValue_integer(t.getValue_integer());
setId(t.getId());
RuleExecutor RuleExecutor=新的RuleExecutor();
Score得分=ruleExecutor.processRules(testrecord);
scoreRepository.save(score);
}
}
}您只需要一个bean,在其中注入调度程序和已有的工厂。例如:
@Service
public class QuartzService {
private Scheduler scheduler;
private CronTriggerFactoryBean cronTriggerFactory;
private JobDetailFactoryBean jobDetailFactory;
public void createJob() {
JobDetail job = jobDetailFactory.getObject();
Trigger trigger = cronTriggerFactory.getObject();
scheduler.scheduleJob(job, trigger);
}
// other methods: delete (unschedule), update (modify job), ...
// getters and setters
}
修改此类,使其符合您的要求。我使用这样的类作为web服务中的服务,但它可以用于web应用程序或其他任何东西
此服务由spring创建很重要,这意味着它必须在spring配置bean中定义:
@Bean
public QuartzService quartzService() {
QuartzService service = new QuartzService();
service.setScheduler(quartzScheduler());
service.setJobDetailFactoryBean(processMyJob());
service.setCronTriggerFactoryBean(processMyJobTrigger());
return service;
}