IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot实现定时任务的三种方式 -> 正文阅读

[Java知识库]SpringBoot实现定时任务的三种方式

第一种我们可以使用java原生提供的api去实现一个定时任务

利用Timer这个api,去实现定时任务,用Timertask去创建一个任务

public class javaJob {
    public static void main(String[] args) {
        //利用java的api Timer来完成一个定时任务
        Timer timer = new Timer();
        //其实这个技术也是基于java的线程去做的
        TimerTask task=new TimerTask() {
            @Override
            public void run() {
       System.out.println("这是一个定时任务");
            }
        };
        timer.schedule(task,0,2000);


    }
}

其中完成定时的 timer.schedule(task,0,2000);

解释一下这个里面的含义,首先task这个就是你要定时的一个任务,delay代表延迟多久执行,我们这里为了测试设置为0就就是不延迟,period就是每个多久执行一次,我们为了看到效果设置为2000,也就是2秒执行一次

下面来看效果

好了这个时候我们利用javaAPI做的一个定时任务就是完成了,其实这个就是基于java多线程去做的

但是现在在我们企业级应用中定时任务的应用非常广泛,于是就出现了完成定时任务的技术

比如Quarze,这个技术在现在市面上非常流行

你要想在springboot中整合这个技术,我们首先来了解几个词

>工作(job):用于执行具体的任务

>工作明细(jobDetail):用于定义定时工作的信息

>触发器(Trigger):用于描述触发工作的规则,和定义调度通常用Cron来进行定义调度的规则

>调度(scheduler):用于描述工作明细和触发器之间的关系

理解以上的四个词的含义我们来进行整合Quarze

1.第一步就是来导入整合Quarze的坐标

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

因为springboot中已经提供了版本号了我们这里就用springboot提供的默认版本号

2,这里我们不需要做Quarze的配置,我们要做的是去继承一个quarze的一个抽象类QuartzJobBean,代表这个是一个Job然后是实现这个抽象类中的方法就是我们具体的工作

public class Myquartz extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("hhhh我是quartz");
    }
}

这里我们就完成我们上面所讲的一个工作的创建。

创建完一个job后我们是不是要创建一个jobDetail工作明细来绑定我们的工作,再创建一个触发器来绑定工作明细,再由时间调度说明jobDetail和Tigger的关系

这是不是属于一个配置啊。那么我们此时不再配置中配置这些信息了,我们创建一个配置类来让这些bean加载到spring容器中。

//这个类主要是做配置类去配置JobDetail,Trigger即配置工作明细,和触发器,
@Configuration
public class QuartzConfig {
@Bean
    public JobDetail jobDetail(){
        //在这里工作明细要绑定一个job
        //现在这个工作就完成了这里必须要加上storeDurably,这个作用是当这个任务没有被执行也会一直存在保持持久化

    return JobBuilder.newJob(Myquartz.class).storeDurably().build();

    }
    @Bean
    public Trigger trigger(){

    //这里触发器要绑定一个工作明细JobDetail 同时要完成调度
       //这里要说明一下withSchedule是完成调度的下面这行代码是实现时间调度的要
//要说明一下0 0 0 0 0 0,分别代表 秒 分 时 日 月 星期 其中日 和星期会有冲突通常我们都只配一个 另一个用?代替
        //ScheduleBuilder<? extends Trigger> schdule=CronScheduleBuilder.cronSchedule("0 0 0 0 0 0") ;
        //如CronScheduleBuilder.cronSchedule("0 0 0 1 2 ?")这就代表了2月的第一天0秒0分0时 我们还可以配*代表任意 ;
        //还可以如CronScheduleBuilder.cronSchedule("0/15 * * * * ?")代表没个15秒执行一次
        ScheduleBuilder schdule=CronScheduleBuilder.cronSchedule("0/5 * * * * ?") ;
        //forJob就时绑定工作明细
        return TriggerBuilder.newTrigger().forJob(jobDetail()).withSchedule(schdule).build();
    }


}

这段代码完成后我们就把这些事请都做完了。在这里我要提醒一下特别要注意

ScheduleBuilder schdule=CronScheduleBuilder.cronSchedule("0/5 * * * * ") ;

如何对调度进行配置我上面的代码是每个间隔十五秒执行一次在任意时刻。在上面代码块中有我对这部分有对应的解释。

下面就是开启引导类做一下测试就ok了

下面我们来讲解第三种完成定时任务的技术

其实在springboot中,已经为我们提供了一个完成定时任务的技术。SpringTask这个技术。

它比起Quarze更加的方便。可以使用注解的方式进行。

和Quarze整合一样我们先导入springtask的坐标依赖,但由于这个技术是spring提供的我们不用导入就有这个功能

我们要做的是进行配置

# 配置springtask 定时任务相关的配置

spring:
  task:
    scheduling:
      pool:
        size: 10
      thread-name-prefix: hanhan
    execution:
      shutdown:
#        线程关闭时是否等所有任务结束
        await-termination: false
#        线程最大的等待时间,防止线程陷入循环关不掉
        await-termination-period: 10s

对于 thread-name-prefix 这个配置其实就是给你的任务加个前缀便于区分。和你使用线程一样。

size就是规定线程池的大小。 await-termination: 就是当你将线程关闭时还有任务没有完成是否等待它完成后关闭 await-termination-period: 就是为了防止你的任务是个无限执行的任务,设置一个最大等待时间。

下面要做的事情就是开启我们定时任务的功能。

首先在引导类上使用**@EnableScheduling**注解开启定时任务

@SpringBootApplication
@EnableScheduling //这个注解的作用就是开启定时任务功能 利用springtask即时spring的自己的技术
public class Springbooot2TaskApplication {

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

}

在然后我们只要在你要执行的任务上使用**@Scheduled**代表这是一个定时任务

@Component
public class SpringTaskJob {
    @Scheduled(cron ="0/1 * * * * ?")
    public void task(){

        System.out.println(Thread.currentThread().getName()+"韩波hhh");
    }
}

同时在注解中定义调度。和Quarze一样需要配置调度。但是这里是不是比Quarze简单许多

到这里我们使用springtask完成一个定时任务已经完成。

这里出现的同时还有我刚刚使用Quarze技术完成的定时任务

好了这里我们springboot三种完成定时任务的方法已经完成

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:29:56  更:2022-08-06 10:31:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:09:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码