• Quartz实现记录


    1、配置文件quartz.properties

    #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、控制器

    @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、任务类

     

    @DisallowConcurrentExecution
    @Component
    public class QuartzTestJob implements Job {
        @Override
        public void execute(JobExecutionContext jobExecutionContext) {
            // 执行具体的任务
        }
    }
    

      

  • 相关阅读:
    while循环和do while循环的基本使用和区别
    less框架简介
    css关联选择器大致类型总结
    渐进增强和优雅降级
    行,行内元素与块级元素有什么不同?
    for循环的大概遍历运用
    JDBC连接mysql数据库并进行简单操作
    Java实现杨辉三角
    replaceAll() 方法
    java抽象类和接口的区别
  • 原文地址:https://www.cnblogs.com/bien94/p/13965112.html
Copyright © 2020-2023  润新知