SpringBoot学习-持久化Quartz定时任务管理
来源:互联网 发布:网络直播相关法律出台 编辑:程序博客网 时间:2024/06/05 01:57
上一篇讲述了简单的QuartZ定时器的配置,这一次说一下持久化处理过程。
参考博文:http://blog.csdn.net/u012907049/article/details/73801122
首先是配置文件-quartz.properties:
# 固定前缀org.quartz# 主要分为scheduler、threadPool、jobStore、plugin等部分##org.quartz.scheduler.instanceName = DefaultQuartzSchedulerorg.quartz.scheduler.rmi.export = falseorg.quartz.scheduler.rmi.proxy = falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction = false# 实例化ThreadPool时,使用的线程类为SimpleThreadPoolorg.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool# threadCount和threadPriority将以setter的形式注入ThreadPool实例# 并发个数org.quartz.threadPool.threadCount = 5# 优先级org.quartz.threadPool.threadPriority = 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = trueorg.quartz.jobStore.misfireThreshold = 5000# 默认存储在内存中#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore#持久化org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.dataSource = qzDSorg.quartz.dataSource.qzDS.driver = com.mysql.jdbc.Driverorg.quartz.dataSource.qzDS.URL = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8org.quartz.dataSource.qzDS.user = rootorg.quartz.dataSource.qzDS.password = 123456org.quartz.dataSource.qzDS.maxConnections = 10
比上一篇配置更详细,我参考的,有兴趣可以了解看看
接下里就是配置类-SchedulerConfig:
package com.example.demo.quartz;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.ee.servlet.QuartzInitializerListener;import org.springframework.beans.factory.config.PropertiesFactoryBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.ClassPathResource;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import javax.sql.DataSource;import java.io.IOException;import java.util.Properties;@Configurationpublic class SchedulerConfig { @Bean public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) throws IOException, SchedulerException { SchedulerFactoryBean factory = new SchedulerFactoryBean(); factory.setQuartzProperties(quartzProperties()); Scheduler scheduler = factory.getScheduler(); if(null != scheduler ){ scheduler.start(); } return factory; } @Bean public Properties quartzProperties() throws IOException { PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties")); return propertiesFactoryBean.getObject(); } @Bean public QuartzInitializerListener executorListener() { return new QuartzInitializerListener(); }}
Job管理接口-JobController:
package com.example.demo.controller;import com.example.demo.entities.JobDto;import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.*;/** * Created by John.Zhang on 2017/10/25. */@RestController@RequestMapping(value="/job")public class JobController{// @Autowired// private IJobAndTriggerService iJobAndTriggerService; private static Logger log = LoggerFactory.getLogger(JobController.class); @PostMapping(value="/addjob") public void addjob(@RequestBody JobDto jobDto) throws Exception { addJob(jobDto.getJobClassName(), jobDto.getJobGroupName(), jobDto.getCronExpression()); } public static void addJob(String jobClassName, String jobGroupName, String cronExpression)throws Exception{ // 通过SchedulerFactory获取一个调度器实例 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); // 启动调度器 sched.start(); //构建job信息 JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName, jobGroupName).build(); //表达式调度构建器(即任务执行的时间) CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); //按新的cronExpression表达式构建一个新的trigger CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobClassName, jobGroupName) .withSchedule(scheduleBuilder).build(); try { sched.scheduleJob(jobDetail, trigger); } catch (SchedulerException e) { System.out.println("创建定时任务失败"+e); throw new Exception("创建定时任务失败"); } } @PostMapping(value="/pausejob") public void pausejob(@RequestBody JobDto jobDto) throws Exception { jobPause(jobDto.getJobClassName(), jobDto.getJobGroupName()); } public static void jobPause(String jobClassName, String jobGroupName) throws Exception { // 通过SchedulerFactory获取一个调度器实例 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); sched.pauseJob(JobKey.jobKey(jobClassName, jobGroupName)); } @PostMapping(value="/resumejob") public void resumejob(@RequestBody JobDto jobDto) throws Exception { jobresume(jobDto.getJobClassName(), jobDto.getJobGroupName()); } public static void jobresume(String jobClassName, String jobGroupName) throws Exception { // 通过SchedulerFactory获取一个调度器实例 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); sched.resumeJob(JobKey.jobKey(jobClassName, jobGroupName)); } @PostMapping(value="/reschedulejob") public void rescheduleJob(@RequestBody JobDto jobDto) throws Exception { jobreschedule(jobDto.getJobClassName() , jobDto.getJobGroupName(), jobDto.getCronExpression()); } public static void jobreschedule(String jobClassName, String jobGroupName, String cronExpression) throws Exception { try { SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); TriggerKey triggerKey = TriggerKey.triggerKey(jobClassName, jobGroupName); // 表达式调度构建器 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); // 按新的cronExpression表达式重新构建trigger trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); // 按新的trigger重新设置job执行 scheduler.rescheduleJob(triggerKey, trigger); } catch (SchedulerException e) { System.out.println("更新定时任务失败"+e); throw new Exception("更新定时任务失败"); } } @PostMapping(value="/deletejob") public void deletejob(@RequestBody JobDto jobDto) throws Exception { jobdelete(jobDto.getJobClassName(), jobDto.getJobGroupName()); } public static void jobdelete(String jobClassName, String jobGroupName) throws Exception { // 通过SchedulerFactory获取一个调度器实例 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); sched.pauseTrigger(TriggerKey.triggerKey(jobClassName, jobGroupName)); sched.unscheduleJob(TriggerKey.triggerKey(jobClassName, jobGroupName)); sched.deleteJob(JobKey.jobKey(jobClassName, jobGroupName)); } /*@GetMapping(value="/queryjob") public Map<String, Object> queryjob(@RequestParam(value="pageNum")Integer pageNum, @RequestParam(value="pageSize")Integer pageSize) { PageInfo<JobAndTrigger> jobAndTrigger = iJobAndTriggerService.getJobAndTriggerDetails(pageNum, pageSize); Map<String, Object> map = new HashMap<String, Object>(); map.put("JobAndTrigger", jobAndTrigger); map.put("number", jobAndTrigger.getTotal()); return map; }*/ public static Job getClass(String classname) throws Exception { Class<?> class1 = Class.forName(classname); return (Job)class1.newInstance(); }}
前后台传递实体类-JobDto :
package com.example.demo.entities;/** * Created by John.Zhang on 2017/10/25. */public class JobDto { private String jobClassName; private String jobGroupName; private String cronExpression; public String getJobClassName() { return jobClassName; } public void setJobClassName(String jobClassName) { this.jobClassName = jobClassName; } public String getJobGroupName() { return jobGroupName; } public void setJobGroupName(String jobGroupName) { this.jobGroupName = jobGroupName; } public String getCronExpression() { return cronExpression; } public void setCronExpression(String cronExpression) { this.cronExpression = cronExpression; }}
其他的调用接口执行就行,使用页面、测试类或者类似于PostMan之类的测试工具都可以
阅读全文
0 0
- SpringBoot学习-持久化Quartz定时任务管理
- 关于学习SpringMvc整合QuartZ定时管理任务的持久化管理
- Spring Boot集成持久化Quartz定时任务管理和界面展示
- Spring Boot集成持久化Quartz定时任务管理和界面展示
- Spring Boot集成持久化Quartz定时任务管理和界面展示
- quartz 定时任务管理
- 【springboot】 springboot集成quartz实现定时任务
- Quartz定时任务学习
- Quartz定时任务学习
- 【Quartz】将定时任务持久化到数据库
- Quartz将定时任务持久化到数据库
- 【Quartz】将定时任务持久化到数据库
- spring+quartz定时任务管理
- Quartz动态定时任务管理
- springboot整合quartz实现定时任务
- 6. springboot整合quartz实现定时任务
- 定时任务quartz与spring整合(springboot)
- springboot整合quartz实现定时任务
- Git相关操作二
- SIFT特征点描述子生成(生成特征向量)
- spring AOP使用注解无法执行的问题
- spring的value获取不到值
- 全局异常捕获
- SpringBoot学习-持久化Quartz定时任务管理
- Git相关操作三
- 喜欢英语却不愿意付出行动
- hihocoder-1523
- 【图像融合】主成分分析PCA
- Git相关操作四
- Action中通配符的使用
- java设计模式之单例模式
- 图的深度优先遍历和广度优先遍历