打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
spring

spring-boot集成Quartz

Xml代码  
  1. <dependency>  
  2.     <groupId>org.quartz-scheduler</groupId>  
  3.     <artifactId>quartz</artifactId>  
  4.     <version>2.2.3</version>  
  5. </dependency>  
  6. <dependency>  
  7.         <groupId>org.quartz-scheduler</groupId>  
  8.     <artifactId>quartz-jobs</artifactId>  
  9.     <version>2.2.3</version>  
  10. </dependency>  

 

 

Java代码  
  1. @Configuration  
  2. public class QuartzConfig {  
  3.   
  4.     @Bean  
  5.     public Scheduler scheduler() throws IOException, SchedulerException {  
  6.         SchedulerFactory schedulerFactory = new StdSchedulerFactory(quartzProperties());  
  7.         Scheduler scheduler = schedulerFactory.getScheduler();  
  8.         scheduler.start();  
  9.         return scheduler;  
  10.     }  
  11.   
  12.     /** 
  13.      * 设置quartz属性 
  14.      * @throws IOException 
  15.      * 2016年10月8日下午2:39:05 
  16.      */  
  17.     public Properties quartzProperties() throws IOException {  
  18.         Properties prop = new Properties();  
  19.         prop.put("quartz.scheduler.instanceName", "ServerScheduler");  
  20.         prop.put("org.quartz.scheduler.instanceId", "AUTO");  
  21.         prop.put("org.quartz.scheduler.skipUpdateCheck", "true");  
  22.         prop.put("org.quartz.scheduler.instanceId", "NON_CLUSTERED");  
  23.         prop.put("org.quartz.scheduler.jobFactory.class", "org.quartz.simpl.SimpleJobFactory");  
  24.         prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");  
  25.         prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");  
  26.         prop.put("org.quartz.jobStore.dataSource", "quartzDataSource");  
  27.         prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");  
  28.         prop.put("org.quartz.jobStore.isClustered", "true");  
  29.         prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");  
  30.         prop.put("org.quartz.threadPool.threadCount", "5");  
  31.   
  32.         prop.put("org.quartz.dataSource.quartzDataSource.driver", "com.mysql.jdbc.Driver");  
  33.         prop.put("org.quartz.dataSource.quartzDataSource.URL", "jdbc:mysql://localhost:3306/demo-schema");  
  34.         prop.put("org.quartz.dataSource.quartzDataSource.user", "root");  
  35.         prop.put("org.quartz.dataSource.quartzDataSource.password", "123456");  
  36.         prop.put("org.quartz.dataSource.quartzDataSource.maxConnections", "10");  
  37.         return prop;  
  38.     }  
  39. }  

 

Java代码  
  1. @Service  
  2. public class TaskServiceImpl {  
  3.     private Logger logger = LogManager.getLogger(getClass());  
  4.     @Autowired  
  5.     private Scheduler scheduler;  
  6.   
  7.     /** 
  8.      * 所有任务列表 
  9.      * 2016年10月9日上午11:16:59 
  10.      */  
  11.     public List<TaskInfo> list(){  
  12.         List<TaskInfo> list = new ArrayList<>();  
  13.   
  14.         try {  
  15.             for(String groupJob: scheduler.getJobGroupNames()){  
  16.                 for(JobKey jobKey: scheduler.getJobKeys(GroupMatcher.<JobKey>groupEquals(groupJob))){  
  17.                     List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);  
  18.                     for (Trigger trigger: triggers) {  
  19.                         Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());  
  20.                         JobDetail jobDetail = scheduler.getJobDetail(jobKey);  
  21.   
  22.                         String cronExpression = "", createTime = "";  
  23.   
  24.                         if (trigger instanceof CronTrigger) {  
  25.                             CronTrigger cronTrigger = (CronTrigger) trigger;  
  26.                             cronExpression = cronTrigger.getCronExpression();  
  27.                             createTime = cronTrigger.getDescription();  
  28.                         }  
  29.                         TaskInfo info = new TaskInfo();  
  30.                         info.setJobName(jobKey.getName());  
  31.                         info.setJobGroup(jobKey.getGroup());  
  32.                         info.setJobDescription(jobDetail.getDescription());  
  33.                         info.setJobStatus(triggerState.name());  
  34.                         info.setCronExpression(cronExpression);  
  35.                         info.setCreateTime(createTime);  
  36.                         list.add(info);  
  37.                     }                     
  38.                 }  
  39.             }             
  40.         } catch (SchedulerException e) {  
  41.             e.printStackTrace();  
  42.         }  
  43.   
  44.         return list;  
  45.     }  
  46.   
  47.     /** 
  48.      * 保存定时任务 
  49.      * @param info 
  50.      * 2016年10月9日上午11:30:40 
  51.      */  
  52.     @SuppressWarnings("unchecked")  
  53.     public void addJob(TaskInfo info) {  
  54.         String jobName = info.getJobName(),   
  55.                jobGroup = info.getJobGroup(),   
  56.                cronExpression = info.getCronExpression(),  
  57.                jobDescription = info.getJobDescription(),  
  58.                createTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");  
  59.         try {  
  60.             if (checkExists(jobName, jobGroup)) {  
  61.                 logger.info("===> AddJob fail, job already exist, jobGroup:{}, jobName:{}", jobGroup, jobName);  
  62.                 throw new ServiceException(String.format("Job已经存在, jobName:{%s},jobGroup:{%s}", jobName, jobGroup));  
  63.             }  
  64.   
  65.             TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);  
  66.             JobKey jobKey = JobKey.jobKey(jobName, jobGroup);  
  67.   
  68.             CronScheduleBuilder schedBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();  
  69.             CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withDescription(createTime).withSchedule(schedBuilder).build();  
  70.   
  71.   
  72.             Class<? extends Job> clazz = (Class<? extends Job>)Class.forName(jobName);  
  73.             JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(jobKey).withDescription(jobDescription).build();  
  74.             scheduler.scheduleJob(jobDetail, trigger);  
  75.         } catch (SchedulerException | ClassNotFoundException e) {  
  76.             throw new ServiceException("类名不存在或执行表达式错误");  
  77.         }  
  78.     }  
  79.   
  80.     /** 
  81.      * 修改定时任务 
  82.      * @param info 
  83.      * 2016年10月9日下午2:20:07 
  84.      */  
  85.     public void edit(TaskInfo info) {  
  86.         String jobName = info.getJobName(),   
  87.                jobGroup = info.getJobGroup(),   
  88.                cronExpression = info.getCronExpression(),  
  89.                jobDescription = info.getJobDescription(),  
  90.                createTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");  
  91.         try {  
  92.             if (!checkExists(jobName, jobGroup)) {  
  93.                 throw new ServiceException(String.format("Job不存在, jobName:{%s},jobGroup:{%s}", jobName, jobGroup));  
  94.             }  
  95.             TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);  
  96.             JobKey jobKey = new JobKey(jobName, jobGroup);  
  97.             CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();  
  98.             CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withDescription(createTime).withSchedule(cronScheduleBuilder).build();  
  99.   
  100.             JobDetail jobDetail = scheduler.getJobDetail(jobKey);  
  101.             jobDetail.getJobBuilder().withDescription(jobDescription);  
  102.             HashSet<Trigger> triggerSet = new HashSet<>();  
  103.             triggerSet.add(cronTrigger);  
  104.   
  105.             scheduler.scheduleJob(jobDetail, triggerSet, true);  
  106.         } catch (SchedulerException e) {  
  107.             throw new ServiceException("类名不存在或执行表达式错误");  
  108.         }  
  109.     }  
  110.   
  111.     /** 
  112.      * 删除定时任务 
  113.      * @param jobName 
  114.      * @param jobGroup 
  115.      * 2016年10月9日下午1:51:12 
  116.      */  
  117.     public void delete(String jobName, String jobGroup){  
  118.         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);  
  119.         try {  
  120.             if (checkExists(jobName, jobGroup)) {  
  121.                 scheduler.pauseTrigger(triggerKey);  
  122.                 scheduler.unscheduleJob(triggerKey);  
  123.                 logger.info("===> delete, triggerKey:{}", triggerKey);  
  124.             }  
  125.         } catch (SchedulerException e) {  
  126.             throw new ServiceException(e.getMessage());  
  127.         }  
  128.     }  
  129.   
  130.     /** 
  131.      * 验证是否存在 
  132.      * @param jobName 
  133.      * @param jobGroup 
  134.      * @throws SchedulerException 
  135.      * 2016年10月8日下午5:30:43 
  136.      */  
  137.     private boolean checkExists(String jobName, String jobGroup) throws SchedulerException{  
  138.         TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup);  
  139.         return scheduler.checkExists(triggerKey);  
  140.     }  
  141. }  

 

完整项目:https://github.com/leelance/spring-boot-all/tree/master/spring-boot-quartz

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Quartz之JobDetail与JobDataMap
quartz使用案例篇【面试+工作】
几种任务调度的 Java 实现方法与比较
Quartz应用与集群原理分析
springboot Quartz 定时任务工具类
任务调度框架 Quartz 用法指南(超详细)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服