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() {@Overridepublic 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 {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("hhhh我是quartz");}
}
这里我们就完成我们上面所讲的一个工作的创建。
创建完一个job后我们是不是要创建一个jobDetail工作明细来绑定我们的工作,再创建一个触发器来绑定工作明细,再由时间调度说明jobDetail和Tigger的关系
这是不是属于一个配置啊。那么我们此时不再配置中配置这些信息了,我们创建一个配置类来让这些bean加载到spring容器中。
//这个类主要是做配置类去配置JobDetail,Trigger即配置工作明细,和触发器,
@Configuration
public class QuartzConfig {
@Beanpublic JobDetail jobDetail(){//在这里工作明细要绑定一个job//现在这个工作就完成了这里必须要加上storeDurably,这个作用是当这个任务没有被执行也会一直存在保持持久化return JobBuilder.newJob(Myquartz.class).storeDurably().build();}@Beanpublic 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: 10thread-name-prefix: hanhanexecution: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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
SpringBoot实现定时任务的三种方式相关推荐
- SpringBoot实现定时任务的三种方式,总有一款适合你!
点击关注公众号,利用碎片时间学习 序言 SpringBoot创建定时任务,目前主要有以下三种实现方式: 基于注解(@Scheduled): 基于注解@Scheduled默认为单线程,开启多个任务时,任 ...
- springboot读取配置文件的三种方式
项目中springboot读取配置文件的三种方式: 1.使用Environment 2.使用@Value 3.使用@ConfigurationProperties注解映射到bean中,定义一个User ...
- spring boot 开启定时任务的三种方式
序言 使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式: 一.基于注解(@Scheduled) 二.基于接口(SchedulingConfigurer) 前者相信大家都很熟悉, ...
- Springboot项目启动的三种方式
springboot的启动方式主要有三种 运行带有main方法类 配置请求参数 通过命令行 java -jar 的方式:java -jar xxx.jar --server.port=8081 jav ...
- 详解Springboot下载Excel的三种方式
https://www.jb51.net/article/216656.htm 汇总一下浏览器下载和代码本地下载实现的3种方式. (其实一般都是在代码生成excel,然后上传到oss,然后传链接给前台 ...
- SpringBoot自定义Filter的三种方式
方式一 : 使用OncePerRequestFilter OncePerRequestFilter该过滤器,是spring提供的.默认情况下,每一个请求都会经过该过滤器 方式二: @WebFilter ...
- springboot获取ApplicationContext的三种方式
- SpringBoot整合Dubbo的三种(配置)
SpringBoot整合Dubbo的三种方式 1.使用application.properties 1.提供者 2.消费者 2.使用dubbo.xml 1.提供者 2.消费者 3.使用注解配置 1.提 ...
- SpringBoot三种方式实现定时任务
SpringBoot三种方式实现定时任务 定时任务实现的三种方式: Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用 ...
最新文章
- 第二次Java作业2
- mysql5.6最好的备份方案_Mysql 5.6迁移至PostgreSQL 9.6的实践小结
- 可算是有文章,把Linux零拷贝讲透彻了!
- Chrome 控制台的console用法收集
- python字符编码与转码
- Windows8.1还原文件类型的默认打开方式
- ICCV2021 新增数据集汇总 | 含时序动作定位、时空行为检测、弱光目标检测等!...
- SPOJ NSUBSTR(后缀自动机)
- java编译sql存过_SQL SERVER 临时表导致存储过程重编译(recompile)的一些探讨
- MVCJSONJQuery分页实现
- STM32——蜂鸣器示例代码
- 洛谷OJ测评常见的错误
- web 应用程序与桌面应用程序的区别与优缺点
- bzoj 3162: 独钓寒江雪 树形dphash
- Riverbed破解数字性能密码,引领云时代数字变革
- 表达式运算(包含大整数加减乘)
- “黑盒”下的攻击实现,真实世界的“人脸识别”遭遇危险!
- AI 教你画油画:任意画风都可驾驭
- arduino小车,准备(一):TB6612FNG电机驱动器
- SIM卡的操作系统cos