java定时任务管理_基于SpringBoot+layui秒级定时任务管理:JTimer for JAVA项目

一、JTimer for JAVA简介

1、项目介绍

JTimer for JAVA是基于SpringBoot+layui秒级定时任务管理,取代crontab。其PHP版本 https ://gitee.com/itzhoujun/JTimer,基于thinkphp5+layui秒级定时任务管理,任务进程使用master-worker模型,无阻塞执行任务,预览图可以点击上方php版本连接,两个版本功能基本一致。

jtimer使用了master-worker进程模型,能够实现无阻塞执行任务。时间表达使用了cron表达式,可精确到秒级,方便好用(比crontab多一位)

运行环境包括了1、Linux;2、JDK1.8 及以上版本;3、mysql

737f79ce8a69e1e70c522be7be20ce47.pngcron表达式

2、安装教程

创建数据库jtimer,将src/main/resources目录下jtimer.sql导入修改application.yml中数据库连接配置在项目根目录下执行mvn clean package打包项目,将在target目录下生成jar包用java命令执行target下jar包:

java -jar jtimer-0.0.1-SNAPSHOT.jar > jtimer-java.log2>&1 &

用户名密码:admin/admin

当前版本缺少登录验证码功能,后续版本补上

3、进程描述

2d027b9009fba79cb7d6ccf8f8628242.pngj进程描述

简单来说,就是两个worker进程,1个负责数据的读写(读任务,写日志),1个负责任务的执行(创建task进程执行任务)。

两者之间通过tp框架自带的文件缓存作为沟通的桥梁。

Q1: 为什么要用两个worker,而不是一个worker直接读数据库然后执行任务?

为了让任务不阻塞,执行每一个任务时都会创建一个新的task进程去执行,task进程执行完毕会退出。如果在worker进程使用了数据库连接,那么fork出来的task进程会继承worker进程的连接(共用一个数据库连接),在task进程退出后,worker和task共用的连接也将被关闭,导致worker断开数据库连接。

Q2:cron任务定时执行是如何实现的?

先解析任务的cron表达式得到该任务下次要执行的具体时间,然后将该任务置于时间轮片(TimingWheel)中,worker进程每秒查看一次时间轮片,发现有要执行的任务就取出来执行。执行完毕后再重复执行上面的步骤。(关于TimingWheel,请自行百度)

4、注意

本项目只在测试环境运行过,如果要用于生产环境,请自行进行严格的测试后再投入使用。如有问题,自行负责。定时器每秒有零点几毫秒的误差,几个小时累计下来可能有1秒的误差。因此要求时间非常精准的业务任务请不要使用本系统。

5演示图片

805cd344e88ceaeb29070dccadc32612.pngy演示1

d03713b5cc48063bc38a31f9ec28d603.png演示5

805cd344e88ceaeb29070dccadc32612.png

487a7390e18ab82d0e88e1357ab323b7.png

aca18a865ced8324a89dbe0bc6d6af39.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值