Spring Schedule定时用法详解
java开发的小伙伴们在业务开发中需要用到执行定时任务的情况下非常多,今天就介绍下使用Spring Schedule来做定时任务。
Spring Schedule是一个强大的工具,用于在Java应用程序中调度和执行定时任务。通过使用Spring Schedule,开发者可以轻松地创建和管理定时任务,而无需依赖外部的调度框架或服务。本文将详细介绍如何在Spring项目中配置和使用Scheduled任务。
首先,确保你的项目已经包含Spring Boot Starter依赖。如果还没有,请在你的pom.xml文件中添加以下内容:
在Spring Boot应用的主类上添加@EnableScheduling注解,以启用定时任务的支持。
创建一个带有@Scheduled注解的方法来定义定时任务。你可以指定多种不同的时间表达式来控制任务的执行频率。
fixedRate属性表示任务之间的固定时间间隔,单位为毫秒。无论任务执行需要多长时间,下一个任务都会在前一个任务完成后等待指定的时间间隔后开始。
fixedDelay属性表示前一个任务完成后到下一个任务开始之间的固定时间间隔,单位为毫秒。如果任务执行时间超过了指定的延迟时间,那么下一次执行将在任务完成后立即开始。
cron属性允许你使用标准的cron表达式来定义复杂的调度规则。例如:
- \”0 0 12 * * ?\”: 每天中午12点执行一次。
- \”*/5 * * * * ?\”: 每5秒执行一次。
- \”0 0/5 14 * * ?\”: 每天下午2点到2:55之间,每5分钟执行一次。
有时候,你可能需要在运行时动态地修改定时任务的执行频率或其他属性。可以通过编程方式实现这一点。
- 线程池:默认情况下,Spring使用一个简单的单线程调度器来执行定时任务。如果你的应用有多个定时任务,并且这些任务需要并发执行,建议配置一个更大的线程池。可以在application.properties或application.yml中进行配置:
- 事务管理:默认情况下,定时任务不会开启事务支持。如果需要在定时任务中使用事务,可以手动开启:
- 异常处理:确保在定时任务中妥善处理异常,以避免由于未捕获的异常导致整个应用崩溃。可以使用try-catch块来捕获并处理异常。
以下是一个简单的Spring Boot项目的结构示例,展示了如何组织定时任务相关的代码:
创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦。
Java定时任务的五种创建方式,你都会么?
Quartz表达式生成地址:http://cron.qqe2.com/
支持生成定时任务表达式和反解析,使用Quartz表达式的定时任务如下
- xxl-job
- springboot 的 @Scheduled
- Quartz 框架
1、使用线程创建 job 定时任务
2、使用 TimerTask 创建job定时任务
3、使用线程池创建 job定时任务
4.Quartz 框架
1.引入maven依赖
2.任务调度类
3.启动类
5. springboot 的 @Scheduled 注解
xxl-job 有什么用?
- 分布式集群的情况下,保证定时任务不被重复执行。
- 执行原理同Nginx 类型,所有定时任务通过任务调度平台分发,也可配置负载均衡等等
- 首先让我们能够使用起来,搭建一个自己的任务
第一步: github下载源码导入
下载地址:https://github.com/xuxueli/xxl-job/
当前版本目录结构 2.1.1
第二步: 执行sql
文件地址:xxl-job/doc/db/tables_xxl_job.sql
当前2.1.1版本sql
第三步: 修改xxl-job-admin项目配置
配置文件:application.properties
修改数据库连接
第四步: 启动admin项目
springboot 方式启动项目,
访问 http://localhost:8080/xxl-job-admin/
账号密码:admin / 123456
任务调度中心就搭建好了
接下来需要创建一个服务器连接任务调度中心
创建一个 boot 项目
我的目录结构
pom.xml
web核心及 xxl-job-core
logback.xml
日志配置直接拷贝
application.properties 加入配置
需修改或自定义
- xxl-job admin 地址
- xxl.job.executor.appname 自定义名称,后台配置必须对应
- xxl.job.executor.ip 当前电脑Ip,或部署项目的电脑Ip
- xxl.job.executor.port 端口
添加boot配置类 XxlJobConfig
任务job
admin 后台配置
执行管理器下
任务管理下编辑任务
定时规则生成:http://cron.qqe2.com/
job任务名:@JobHandler注解值 >> 如:@JobHandler(value=“demoJobHandler”)
启动
这样就配置完成了
完成
应用项目:https://gitee.com/wslxm/spring-boot-plus2
Java—定时任务的实现方式
见名知意,定时任务就是每隔一段时间执行一次这个任务,比如我们日常生活中的下课铃,或者是闹钟等等,就是在设置好的固定时间段去不断执行这个任务。
这次我介绍两种执行定时任务的方法,一种是使用 Quartz ,一种是使用Task , 下面我将分别详细介绍这两种方法如何代码实现。
Quartz技术是一个比较成熟的定时任务框架,怎么说呢?有点繁琐,用过的都知道,配置略微复杂。springboot对其进行整合后,简化了一系列的配置,将很多配置采用默认设置,这样开发阶段就简化了很多。再学习springboot整合Quartz前先普及几个Quartz的概念。
工作(Job):用于定义具体执行的工作
工作明细(JobDetail):用于描述定时工作相关的信息
触发器(Trigger):用于描述了工作明细与调度器的对应关系
调度器(Scheduler):用于描述触发工作的执行规则,通常使用cron表达式定义规则
简单说就是你定时干什么事情,这就是工作,工作不可能就是一个简单的方法,还要设置一些明细信息。工作啥时候执行,设置一个调度器,可以简单理解成设置一个工作执行的时间。工作和调度都是独立定义的,它们两个怎么配合到一起呢?用触发器。完了,就这么多。下面开始springboot整合Quartz。
步骤①:导入springboot整合Quartz的starter
步骤②:定义任务Bean,按照Quartz的开发规范制作,继承QuartzJobBean,就是编写一个类,用于编写你需要定时执行的任务逻辑
步骤③:创建Quartz配置类,定义工作明细(JobDetail)与触发器的(Trigger)bean。
就是写一个quartz配置类,绑定要执行的工作以及多久执行一次
最后直接启动springBoot服务器,他就会根据你设置的时间间隔去执行任务。
Quartz将其中的对象划分粒度过细,导致开发的时候有点繁琐,spring针对上述规则进行了简化,开发了自己的任务管理组件——Task
spring根据定时任务的特征,将定时任务的开发简化到了极致。怎么说呢?要做定时任务总要告诉容器有这功能吧,然后定时执行什么任务直接告诉对应的bean什么时间执行就行了,就这么简单,一起来看怎么做
步骤①:开启定时任务功能,在启动类上开启定时任务功能的开关,使用注解@EnableScheduling。
步骤②:定义Bean,在对应要定时执行的操作上方,使用注解@Scheduled定义执行的时间,执行时间的描述方式还是cron表达式。要记住把类交给spring管理
这样就可以直接启动服务,执行定时任务啦。
刚刚在上面两种方式,我们都需要设置间隔时间,而间隔时间的设置用的就是cron表达式:
cron=\”0/10 * * * * ?\”
上面这个表示就是间隔10s,具体怎么写就不去详细说了,这里给出一张cron表达式表,可以自己去看,如果不会可以直接问ai帮你生成,都很简单
本次分享在这里就结束了,关注我每天分享有用的java知识。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。