Quartz实现记录
1、配置文件quartz.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #ID设置为自动获取,所有调度器实例中是唯一的 org.quartz.scheduler.instanceId=AUTO #StdJDBCDelegate说明支持集群 org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate #quartz内部表的前缀 org.quartz.jobStore.tablePrefix=QRTZ_ #是否加入集群 org.quartz.jobStore.isClustered=true #指定调度程序的主线程是否应该是守护线程 org.quartz.scheduler.makeSchedulerThreadDaemon=true #ThreadPool实现的类名 org.quartz.threadPool. class =org.quartz.simpl.SimpleThreadPool #ThreadPool配置线程守护进程 org.quartz.threadPool.makeThreadsDaemons=true #线程数量 org.quartz.threadPool.threadCount: 20 #线程优先级 org.quartz.threadPool.threadPriority: 5 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true #数据保存方式为持久化 org.quartz.jobStore. class =org.quartz.impl.jdbcjobstore.JobStoreTX #容许的最大作业延长时间 org.quartz.jobStore.misfireThreshold= 60000 org.quartz.jobStore.clusterCheckinInterval= 20000 |
2、控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | @RestController @RequestMapping ( "/quartz" ) public class QuartzController { @SuppressWarnings ( "SpringJavaInjectionPointsAutowiringInspection" ) @Autowired private SchedulerFactoryBean schedulerFactoryBean; @Value ( "${quartz.cron:0 0 1 * * ?}" ) private String quartzCron; @ApiOperation ( "添加任务" ) @RequestMapping (value= "/addTask" , method = RequestMethod.PUT) public void addTask(){ // 示例 String jobName = "testJob" ; String jobGroup = "testGroup" ; Class<? extends Job> jobClass = QuartzTestJob. class ; // 这里QuartzTestJob是继承Job的任务类 try { Scheduler scheduler = schedulerFactoryBean.getScheduler(); JobKey jobKey = JobKey.jobKey(jobName, jobGroup); JobDetail jobDetail = scheduler.getJobDetail(jobKey); if (jobDetail != null ){ // 已存在该任务了 } else { // 创建新的任务 jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName).build(); CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartzCron); CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(jobName + "_trigger" , jobGroup + "_trigger" ).withSchedule(cronScheduleBuilder).build(); scheduler.scheduleJob(jobDetail, cronTrigger); } } catch (SchedulerException e){ e.printStackTrace(); } } @ApiOperation ( "删除任务" ) @RequestMapping (value= "/deleteTask" , method = RequestMethod.DELETE) public ServiceData<Object> deleteTask(){ // 示例 String jobName = "testJob" ; String jobGroup = "testGroup" ; try { Scheduler scheduler = schedulerFactoryBean.getScheduler(); JobKey jobKey = JobKey.jobKey(jobName, jobGroup); scheduler.deleteJob(jobKey); } catch (SchedulerException e){ e.printStackTrace(); } } } |
3、任务类
1 2 3 4 5 6 7 8 | @DisallowConcurrentExecution @Component public class QuartzTestJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) { // 执行具体的任务 } } |
阅读是一种修养,分享是一种美德。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架