• 使用springboot-quartz-starts 集成包启动器,quartz快速配置使用


    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.1.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.wpx</groupId>
        <artifactId>springboot-Scheduling</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot-Scheduling</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-quartz -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-quartz</artifactId>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.1</version>
            </dependency>
            
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            
            
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
    
    
    
            <!-- 修改后立即生效,热部署 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
                <version>1.2.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    View Code

    application.yml

    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost/quartz?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
    
    
      quartz:
        job-store-type: jdbc
        jdbc:
          initialize-schema: always
        
    mybatis:
      configuration:
        map-underscore-to-camel-case: true
        
             
    #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    #spring.datasource.url=jdbc:mysql:///myblog?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    #spring.datasource.username=root
    #spring.datasource.password=root
    View Code

    QuartzConfig.java

    package com.wpx.quartz.config;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.JobKey;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SimpleScheduleBuilder;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.TriggerKey;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.quartz.SchedulerFactoryBean;
    
    import com.wpx.quartz.job.HelloJob;
    import com.wpx.quartz.job.HelloJob2;
    
    @Configuration
    public class QuartzConfig{
        @Autowired
        private SchedulerFactoryBean SchedulerFactoryBean;
        
        @Bean
        public Scheduler scheduler() throws SchedulerException {
            Scheduler scheduler = SchedulerFactoryBean.getScheduler();
            
            JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                    .withIdentity("job1", "group1") //参数1:任务名称(唯一) 参数2:分配任务组名
                    .withDescription("我的任务1")
                    .build();        
            
            Trigger trigger = TriggerBuilder.newTrigger()
                    .withIdentity("trigger1", "group1")
                    .startNow()    //开始的时间
                    .withSchedule(CronScheduleBuilder.cronSchedule("2/5 * * * * ?"))
                    .build();
            
            JobDetail jobDetail2 = JobBuilder.newJob(HelloJob2.class)
                    .withIdentity("job2", "group1") //参数1:任务名称(唯一) 参数2:分配任务组名
                    .withDescription("我的任务2")
                    .build();        
            
            Trigger trigger2 = TriggerBuilder.newTrigger()
                    .withIdentity("trigger2", "group1")
                    .startNow()    //开始的时间
                    .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(10))
                    .build();
        
            
            scheduler.scheduleJob(jobDetail, trigger);
            
            scheduler.scheduleJob(jobDetail2, trigger2);
            System.out.println(scheduler.getTrigger(TriggerKey.triggerKey("trigger2", "group1")));
            
            return scheduler;
        }
       
        
        
    }
    View Code

    JobInfo.java

    package com.wpx.quartz.entity;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    
    import lombok.Data;
    
    @Data
    public class JobInfo {
        private String jobGroup;
        private String jobName;
        private String triggerGroup;
        private String triggerName;
        private String description;
        private String jobClassName;
        private String triggerState;
        private String triggerType;
        private String startTime;
        private String endTime;
        private String cronExpressionAndRepeatInterval;
        private String repeatCount;
        private String timesTriggered;
        
        private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        
        public String getStartTime() {
            System.out.println(startTime);
            return sdf.format(new Date(Long.parseLong(startTime)));
        }
        public String getEndTime() {
            if("0".equals(endTime))return "未设定";
            return sdf.format(new Date(Long.parseLong(endTime)));
        }
        public String getRepeatCount() {
            if("-1".equals(repeatCount))return "未设定";
            return repeatCount;
        }
        public String getCronExpressionAndRepeatInterval() {
            if(cronExpressionAndRepeatInterval != null && cronExpressionAndRepeatInterval.matches("\d+")) {    
                
                
                return cronExpressionAndRepeatInterval+"ms";
            }
            return cronExpressionAndRepeatInterval;
        }
    }
    View Code

    ResultWrap.java

    package com.wpx.quartz.entity;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    
    import lombok.Data;
    
    @Data
    public class JobInfo {
        private String jobGroup;
        private String jobName;
        private String triggerGroup;
        private String triggerName;
        private String description;
        private String jobClassName;
        private String triggerState;
        private String triggerType;
        private String startTime;
        private String endTime;
        private String cronExpressionAndRepeatInterval;
        private String repeatCount;
        private String timesTriggered;
        
        private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        
        public String getStartTime() {
            System.out.println(startTime);
            return sdf.format(new Date(Long.parseLong(startTime)));
        }
        public String getEndTime() {
            if("0".equals(endTime))return "未设定";
            return sdf.format(new Date(Long.parseLong(endTime)));
        }
        public String getRepeatCount() {
            if("-1".equals(repeatCount))return "未设定";
            return repeatCount;
        }
        public String getCronExpressionAndRepeatInterval() {
            if(cronExpressionAndRepeatInterval != null && cronExpressionAndRepeatInterval.matches("\d+")) {    
                
                
                return cronExpressionAndRepeatInterval+"ms";
            }
            return cronExpressionAndRepeatInterval;
        }
    }
    View Code

    HelloJob.java

    package com.wpx.quartz.job;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    import com.wpx.quartz.server.HelloService;
    
    public class HelloJob extends QuartzJobBean{
        @Autowired
        private HelloService helloService;
        
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
            
            helloService.sayHello(context);
        }
    
    }
    View Code

    HelloJob2.java

    package com.wpx.quartz.job;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    import com.wpx.quartz.server.HelloService;
    
    public class HelloJob2 extends QuartzJobBean{
        @Autowired
        private HelloService helloService;
        
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
            
            helloService.sayHello(context);
        }
    
    }
    View Code

    quartzMapping.java

    package com.wpx.quartz.mapper;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Select;
    
    import com.wpx.quartz.entity.JobInfo;
    
    @Mapper
    public interface quartzMapping {
        
        
        @Select("SELECT 
    " + 
                "qt.JOB_GROUP,
    " + 
                "qt.JOB_NAME, 
    " + 
                "qjd.DESCRIPTION,
    " + 
                "qjd.JOB_CLASS_NAME,
    " + 
                "qt.TRIGGER_STATE,
    " + 
                "qt.TRIGGER_TYPE,
    " + 
                "qt.START_TIME,
    " + 
                "qt.END_TIME,
    " + 
                "qct.CRON_EXPRESSION cronExpressionAndRepeatInterval,
    " + 
                "'-' REPEAT_COUNT,
    " + 
                "'-' TIMES_TRIGGERED
    " + 
                "FROM qrtz_triggers qt 
    " + 
                "JOIN qrtz_job_details qjd ON qt.JOB_GROUP=qjd.JOB_GROUP AND qt.JOB_NAME=qjd.JOB_NAME
    " + 
                "JOIN qrtz_cron_triggers qct ON qt.TRIGGER_GROUP=qct.TRIGGER_GROUP AND qt.TRIGGER_NAME=qct.TRIGGER_NAME
    " + 
                "UNION
    " + 
                "SELECT 
    " + 
                "qt.JOB_GROUP,
    " + 
                "qt.JOB_NAME, 
    " + 
                "qjd.DESCRIPTION,
    " + 
                "qjd.JOB_CLASS_NAME,
    " + 
                "qt.TRIGGER_STATE,
    " + 
                "qt.TRIGGER_TYPE,
    " + 
                "qt.START_TIME,
    " + 
                "qt.END_TIME,
    " + 
                "qst.REPEAT_INTERVAL cronExpressionAndRepeatInterval,
    " + 
                "qst.REPEAT_COUNT,
    " + 
                "qst.TIMES_TRIGGERED
    " + 
                " FROM qrtz_triggers qt 
    " + 
                "JOIN qrtz_job_details qjd ON qt.JOB_GROUP=qjd.JOB_GROUP AND qt.JOB_NAME=qjd.JOB_NAME
    " + 
                "JOIN qrtz_simple_triggers qst ON qt.TRIGGER_GROUP=qst.TRIGGER_GROUP AND qt.TRIGGER_NAME=qst.TRIGGER_NAME")
        public List<JobInfo> findJobs();
    }
    View Code

    HelloService.java

    package com.wpx.quartz.server;
    
    import java.util.Date;
    
    import org.quartz.JobExecutionContext;
    import org.springframework.stereotype.Service;
    
    @Service
    public class HelloService {
        
        public void sayHello(JobExecutionContext context) {
            System.out.println("hello:"+new Date()+" is "+context.getTrigger().getKey().getName());
            
        }
        
        
    }
    View Code

    QuartzService.java

    package com.wpx.quartz.server;
    
    import java.util.LinkedList;
    import java.util.List;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.Job;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobKey;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.wpx.quartz.entity.JobInfo;
    import com.wpx.quartz.entity.ResultWrap;
    import com.wpx.quartz.job.HelloJob2;
    import com.wpx.quartz.mapper.quartzMapping;
    
    @Service
    public class QuartzService {
        @Autowired
        private Scheduler scheduler;
    
        @Autowired
        quartzMapping quartzMapping;
    
        public List<JobInfo> getJobs() throws SchedulerException{
    
            return quartzMapping.findJobs();
        }
    
        public ResultWrap<Void> addJob(JobInfo info) {        
            try {
                JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>)Class.forName(info.getJobClassName()))
                        .withIdentity(info.getJobName(), info.getJobGroup()) 
                        .build();        
                
                
                
                
                
    //            Trigger trigger = TriggerBuilder.newTrigger()
    //                    .withIdentity(info.getTriggerName(), info.getTriggerGroup())
    //                    .startAt()
    //                    .withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?"))
    //                    .build();        
    //            
                
                
                
                
                
                
                
    //            scheduler.scheduleJob(jobDetail, trigger);
            } catch (Exception e) {
                e.printStackTrace();
                return new ResultWrap<Void>(0, "操作失败");
            }
            return new ResultWrap<Void>(1,"操作成功");
        }
        
        
        
        
        public ResultWrap<Void> deleteJob(String jobName, String jobGroupName) {        
            try {
                scheduler.deleteJob(JobKey.jobKey(jobName, jobGroupName));
            } catch (SchedulerException e) {
                e.printStackTrace();
                return new ResultWrap<Void>(0, "操作失败");
            }
            return new ResultWrap<Void>(1,"操作成功");
        }
        
        public ResultWrap<Void> pauseJob(String jobName, String jobGroupName) {        
            try {
                scheduler.pauseJob(JobKey.jobKey(jobName, jobGroupName));
            } catch (SchedulerException e) {
                e.printStackTrace();
                return new ResultWrap<Void>(0, "操作失败");
            }
            return new ResultWrap<Void>(1,"操作成功");
        }
    
        public ResultWrap<Void> resumeJob(String jobName, String jobGroupName)  {
            try {
                scheduler.resumeJob(JobKey.jobKey(jobName, jobGroupName));
            } catch (SchedulerException e) {
                e.printStackTrace();
                return new ResultWrap<Void>(0, "操作失败");
            }
            return new ResultWrap<Void>(1,"操作成功");
        }
    
    }
    View Code

    SpringApplication.java

    package com.wpx.quartz;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class SpringbootSchedulingApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootSchedulingApplication.class, args);
        }
    
    }
    View Code

    quratzController.java

    package com.wpx.quartz.controller;
    
    import java.util.List;
    import java.util.Set;
    
    import org.quartz.CronScheduleBuilder;
    import org.quartz.JobBuilder;
    import org.quartz.JobDetail;
    import org.quartz.JobKey;
    import org.quartz.Scheduler;
    import org.quartz.Trigger;
    import org.quartz.TriggerBuilder;
    import org.quartz.impl.matchers.GroupMatcher;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.wpx.quartz.entity.JobInfo;
    import com.wpx.quartz.entity.ResultWrap;
    import com.wpx.quartz.job.HelloJob2;
    import com.wpx.quartz.server.QuartzService;
    
    @RestController
    public class quartzController {
        @Autowired
        private Scheduler scheduler;
        @Autowired
        QuartzService quartzService;
        
        @GetMapping("/getjob")
        public List<JobInfo> getJob() throws Exception {
            return quartzService.getJobs();
        }
    
        
        @GetMapping("/addjob")
        public     Object addJob() throws Exception {
            
            return "ok";
        }
        
        
        @GetMapping("/deljob")
        public     ResultWrap<Void> delJob(JobInfo info) throws Exception {    
            return quartzService.deleteJob(info.getJobName(), info.getJobGroup());
        }
        
        @GetMapping("/pausejob")
        public     ResultWrap<Void> pauseJob(JobInfo info) throws Exception {
            
            return quartzService.pauseJob(info.getJobName(), info.getJobGroup());
        }
        @GetMapping("/resumejob")
        public ResultWrap<Void> resumejob(JobInfo info) throws Exception {
            
            return quartzService.resumeJob(info.getJobName(), info.getJobGroup());
        }
        
    }
    View Code

    git参考: https://gitee.com/weipx/springboot-quartz-demo/tree/master/springboot-quartz

  • 相关阅读:
    摆动排序 II
    二进制中1的个数
    n的幂
    丢掉的数字
    phpcms直接取子栏目的内容、调用点击量的方法
    phpcms导航栏当前栏目选中方法
    PHP中的全局变量global和$GLOBALS的区别
    phpcms添加子栏目后的读取
    phpcms取内容发布管理中的来源
    cms替换主页
  • 原文地址:https://www.cnblogs.com/cxxjohnson/p/13747450.html
Copyright © 2020-2023  润新知