版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinafire525/article/details/85273735
1.maven依赖
<!-- quartz 使用了该jar包PlatformTransactionManager类 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency> <!-- 该依赖里面有spring对schedule的支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency>
2.
任务类1
@Service @EnableScheduling public class CustomerMonthBillJob { public void billGenerator() { try { System.out.println("无敌大强"); } catch (Exception e) { } } }
任务类2
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @Service @EnableScheduling public class CustomerShortBillJob { public void shortBillGenerator(){ try { System.out.println("小强很强"); } catch (Exception e) { } } }
3.使用java配置 (无需额外的yml或properties配置)
import com.joydigit.seniorcaring.scheduler.jobs.CustomerMonthBillJob; import com.joydigit.seniorcaring.scheduler.jobs.CustomerShortBillJob; import org.quartz.*; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.context.annotation.Configuration; /** * task config */ @Configuration public class QuartzConfiguration { /** * 配置任务-短住账单 * @param customerShortBillJob * @return */ @Bean(name = "shortBillJob") public MethodInvokingJobDetailFactoryBean detailShortFactoryBean(CustomerShortBillJob customerShortBillJob) { MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); // 是否并发执行 jobDetail.setConcurrent(true); // 设置任务的名字 jobDetail.setName("shortBillJob"); // 设置任务的分组,在多任务的时候使用 jobDetail.setGroup("shortBillJobGroup"); // 为需要执行的实体类对应的对象 jobDetail.setTargetObject(customerShortBillJob); // 需要执行的方法 jobDetail.setTargetMethod("shortBillGenerator"); return jobDetail; } /** * 定时触发器-短住账单 * @param shortBillJob * @return */ @Bean(name = "shortJobTrigger") public CronTriggerFactoryBean cronShortJobTrigger(JobDetail shortBillJob) { CronTriggerFactoryBean trigger = new CronTriggerFactoryBean(); trigger.setJobDetail(shortBillJob); //cron表达式,每1分钟执行一次 trigger.setCronExpression("0 0/1 * * * ?"); trigger.setName("JobTriggerShort"); return trigger; } /** * 配置任务-月账单 * @param customerMonthBillJob QuartzTask为需要执行的任务 * @return */ @Bean(name = "monthBillJob") public MethodInvokingJobDetailFactoryBean detailMonthFactoryBean(CustomerMonthBillJob customerMonthBillJob) { MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); // 是否并发执行 jobDetail.setConcurrent(true); // 设置任务的名字 jobDetail.setName("monthBillJob"); // 设置任务的分组,在多任务的时候使用 jobDetail.setGroup("monthBillJobGroup"); // 需要执行的对象 jobDetail.setTargetObject(customerMonthBillJob); /* * TODO 非常重要 * 执行QuartzTask类中的需要执行方法 */ jobDetail.setTargetMethod("billGenerator"); return jobDetail; } /** * 定时触发器-月账单 * @param monthBillJob 任务 * @return */ @Bean(name = "monthJobTrigger") public CronTriggerFactoryBean cronMonthJobTrigger(JobDetail monthBillJob){ CronTriggerFactoryBean trigger = new CronTriggerFactoryBean(); trigger.setJobDetail(monthBillJob); //cron表达式,每1分钟执行一次 trigger.setCronExpression("0 0/1 * * * ?"); //每月1日 // tigger.setCronExpression("0 0 0 1 * ?"); // tigger.setCronExpression(taskTime); trigger.setName("JobTriggerMonth"); return trigger; } /** * 调度工厂 * @param monthJobTrigger 触发器 * @return */ @Bean(name = "scheduler") public SchedulerFactoryBean schedulerFactory(Trigger monthJobTrigger,Trigger shortJobTrigger ) { SchedulerFactoryBean factoryBean = new SchedulerFactoryBean(); // 用于quartz集群,QuartzScheduler 启动时更新己存在的Job factoryBean.setOverwriteExistingJobs(true); // 延时启动,应用启动1秒后 factoryBean.setStartupDelay(1); // 注册触发器 factoryBean.setTriggers(monthJobTrigger,shortJobTrigger); return factoryBean; } }