springboot---任务---整合quartz与task----定时任务(详细)

目录

普通定时器任务

一、整合quartz

1.1 maven坐标

 1.2 代码实现

     1.2.1 任务代码

   1.2.2 配置类编写

二、整合task

2.1 开启定时任务的开关

2.2  在任务的上面写注解@Scheduled

2.3 定时任务的配置


 

普通定时器任务

在下面这篇文章中有对定时器任务的专门讲解,有兴趣的可以看一下

JavaSE——多线程详细_我爱布朗熊的博客-CSDN博客

public class TimerTaskApp {
    public static void main(String[] args) {
        Timer timer = new Timer();

        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("66666666");
            }
        };

        timer.schedule(timerTask,0,3000);


    }
}

springboot---任务---整合quartz与task----定时任务(详细)_第1张图片

一、整合quartz

   可以将下图看做四步

springboot---任务---整合quartz与task----定时任务(详细)_第2张图片

1.1 maven坐标

        
            org.springframework.boot
            spring-boot-starter-quartz
        

 1.2 代码实现

当我们把整个项目都启动起来,加载了下面的配置,任务就自然而然的启动了

     1.2.1 任务代码

public class MyQuartz  extends QuartzJobBean {
//  QuartzJobBean是抽象类,我们需要实现他的抽象方法

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
//     指定具体要做的事情
        System.out.println("quartz task run...");
    }
}

   1.2.2 配置类编写

@Configuration
public class QuartzConfig {

// JobDetail是一个接口,工作明细
    @Bean
    public JobDetail printJobDetail(){
//      绑定具体的工作(有规范的格式,给newJob()指定上对应的工作种类,也就是对应类的class
//      在newJob()后面科技接着点,有许多的工作明细.其中storeDurably()一定要挂上,表示持久化没就不会被干掉再不用的时候
        return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
    }

//  触发器
    @Bean
    public Trigger printJobTrigger(){
//      第一个零是秒,第二个零是分钟,第三个零是小时,第四个零是日,第五个零是月,第六个零是星期
//      但是我们日期和星期不做同时规定,我们把星期的零删除,改成?,含义是让她自己匹配
//      *代表任意 比如 0 * * * * ? 零秒的任意分钟小时日月,匹配星期几
//                   0/15 * * * * ? 其中0/15表示从0开始没15秒执行一次
        ScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 0 0 0 ?");
//      绑定具体的工作明细
        return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();
    }

}

上面的代码虽然可以实现,但是比较的麻烦,因为有一个工作的话,就需要一个JobDetail

针对上述的麻烦,我们可以看下面的 整合Task

二、整合task

 

2.1 开启定时任务的开关

@SpringBootApplication
@EnableScheduling  //开启定时任务功能
public class
Springboot23TaskApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot23TaskApplication.class, args);
    }

}

2.2  在任务的上面写注解@Scheduled


@Component  //定义成bean
public class MyBean {

    @Scheduled(cron = "0/1 * * * * ?")
    public void print(){
        System.out.println("spring task run.....");
    }

}

我们可以对比上面的两种使用方式,发现下面的这种代码更简洁,效率会更快,尽量掌握下面这种形式的

2.3 定时任务的配置

在application文件中配置

springboot---任务---整合quartz与task----定时任务(详细)_第3张图片

你可能感兴趣的:(springboot,java,mybatis,spring)