最近在做定时任务, 参考了一下这位老兄的文章
http://blog.csdn.net/liuchuanhong1/article/details/60873295
接下来遇到一个问题, 就是多任务, 上面文章中主要讲的是单任务的. 也在网上找了下, 发现都有些复杂.
我觉得springboot 不应该这么笨, 肯定有简单的办法. 所以研究了一下. 下面贴出我的代码
@Configuration public class QuartzConfigration { /** * attention: 名字必须是 jobDetail * Details:配置定时任务 */ @Bean(name = "jobCommissionDetail") public MethodInvokingJobDetailFactoryBean balanceCommissionDetail(BalanceCommission task) { // ScheduleTask为需要执行的任务 MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); jobDetail.setConcurrent(false);//是否并发执行 jobDetail.setName("balanceCommission");// 设置任务的名字 jobDetail.setGroup("balance");// 设置任务的分组,这些属性都可以存储在数据库中,在多任务的时候使用 jobDetail.setTargetObject(task);//为需要执行的实体类对应的对象 //通过这几个配置,告诉JobDetailFactoryBean我们需要执行定时执行ScheduleTask类中的balanceProfit方法 jobDetail.setTargetMethod("execute"); return jobDetail; } @Bean(name = "jobProfitDetail") public MethodInvokingJobDetailFactoryBean balanceProfitDetail(BalanceProfit task) { // ScheduleTask为需要执行的任务 MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); jobDetail.setConcurrent(false);//是否并发执行 jobDetail.setName("balanceProfit");// 设置任务的名字 jobDetail.setGroup("balance");// 设置任务的分组,这些属性都可以存储在数据库中,在多任务的时候使用 jobDetail.setTargetObject(task);//为需要执行的实体类对应的对象 jobDetail.setTargetMethod("execute"); return jobDetail; } @Bean public JobDetailDO getJobDetails(List<MethodInvokingJobDetailFactoryBean> list) { JobDetailDO detailDO = new JobDetailDO(); for (MethodInvokingJobDetailFactoryBean jobDetail : list) { detailDO.addJobDetail(jobDetail); } return detailDO; } // @Bean // public CronTriggerFactoryBean commissionTrigger(JobDetailDO jobDetails) // { // CronTriggerFactoryBean cronTrigger = new CronTriggerFactoryBean(); // cronTrigger.setJobDetail(jobDetails.getJobDetail("balanceCommission").getObject()); // cronTrigger.setCronExpression("*/1 * * * * ?");// 初始时的cron表达式 // cronTrigger.setName("trigger-balanceCommission");// trigger的name // return cronTrigger; // } @Bean public CronTriggerFactoryBean commissionTrigger2(JobDetailDO jobDetails) { CronTriggerFactoryBean cronTrigger = new CronTriggerFactoryBean(); cronTrigger.setJobDetail(jobDetails.getJobDetail("balanceProfit").getObject()); cronTrigger.setCronExpression("*/5 * * * * ?");// 初始时的cron表达式 cronTrigger.setName("trigger-balanceProfit");// trigger的name return cronTrigger; } /** * attention: * Details:定义quartz调度工厂 */ @Bean(name = "scheduler") public SchedulerFactoryBean schedulerFactory(Trigger... triggers) { SchedulerFactoryBean bean = new SchedulerFactoryBean(); // 用于quartz集群,QuartzScheduler 启动时更新己存在的Job bean.setOverwriteExistingJobs(true); // TODO 这句还没理解 // 延时启动,应用启动1秒后 bean.setStartupDelay(1); // 注册触发器 bean.setTriggers(triggers); return bean; } }