# SpringBoot的定时任务动态管理
SpringBoot的定时任务的加强工具,实现定时任务动态管理,完全兼容原生@Scheduled注解,无需对原本的定时任务进行修改
## 引入jar包
```xml
<dependency>
<groupId>com.github.guoyixing</groupId>
<artifactId>spring-boot-starter-super-scheduled</artifactId>
<version>0.3.4</version>
</dependency>
```
## 原理说明
[https://blog.csdn.net/qq_34886352/article/details/106494637](https://blog.csdn.net/qq_34886352/article/details/106494637)
## 配置参数
### 1.配置定时任务线程池(不配置时采用默认参数)
```properties
#线程池大小
spring.super.scheduled.thread-pool.poolSize=30
#线程名前缀
spring.super.scheduled.thread-pool.threadNamePrefix=super
#设置是否关闭时等待执行中的任务执行完成
spring.super.scheduled.thread-pool.waitForTasksToCompleteOnShutdown=false
#设置此执行器被关闭时等待的最长时间,用于在其余容器继续关闭之前等待剩余任务执行完成
#需要将waitForTasksToCompleteOnShutdown设置为true,此配置才起作用
spring.super.scheduled.thread-pool.awaitTerminationSeconds=0
```
### 2.扩展插件配置
```properties
#开启执行标志
spring.super.scheduled.plug-in.executionFlag=true
#开启定时任务调度日志,日志文件是存在本地磁盘上的
spring.super.scheduled.plug-in.executionLog=true
#日志存放位置,不设置默认位置为程序同级目录下
spring.super.scheduled.plug-in.logPath=H:/tmp/log-scheduled
#开启基于zookeeper的集群模式
spring.super.scheduled.plug-in.colony=true
#zookeeper集群模式的定时任务服务名,相同名称的定时任务名称服务会被统一管理
spring.super.scheduled.plug-in.colonyName=test
```
### 3.zookeeper配置
```properties
#设置zookeeper地址,zookeeper集群多个地址用英文逗号隔开
spring.super.scheduled.zookeeper.url=127.0.0.1:2181
#设置zookeeper session超时时间
spring.super.scheduled.zookeeper.sessionTimeout=60000
#设置zookeeper连接超时时间
spring.super.scheduled.zookeeper.connectionTimeout=60000
```
## 使用样例
### 1.正常使用springScheduled
```java
@SpringBootApplication
@EnableScheduling
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
```
```java
@Component
public class TestTask {
private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Scheduled(cron = "0/2 * * * * ?")
public void robReceiveExpireTask() {
System.out.println(df.format(LocalDateTime.now()) + "测试测试");
}
}
```
### 2.定时任务动态管理
```java
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTests {
//直接注入管理器
@Autowired
private SuperScheduledManager superScheduledManager;
@Test
public void test() {
//获取所有定时任务
List<String> allSuperScheduledName = superScheduledManager.getAllSuperScheduledName();
String name = allSuperScheduledName.get(0);
//终止定时任务
superScheduledManager.cancelScheduled(name);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务名:" + name);
//启动定时任务
superScheduledManager.addCronScheduled(name, "0/2 * * * * ?");
//获取启动汇总的定时任务
List<String> runScheduledName = superScheduledManager.getRunScheduledName();
runScheduledName.forEach(System.out::println);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//修改定时任务执行周期
superScheduledManager.setScheduledCron(name, "0/5 * * * * ?");
}
}
```
### 3.管理器功能
#### 3.1 获取所有定时任务
```java
List<String> allSuperScheduledName = superScheduledManager.getAllSuperScheduledName();
```
#### 3.1 获取所有启动的定时任务
```java
List<String> runScheduledName = superScheduledManager.getRunScheduledName();
```
#### 3.2 终止定时任务
```java
superScheduledManager.cancelScheduled(name);
```
#### 3.3 cron类型操作
```java
//以cron模式启动定时任务
superScheduledManager.addCronScheduled(name, "0/2 * * * * ?");
//将定时任务转为cron模式运行,并修改cron的参数值
superScheduledManager.setScheduledCron(name, "0/2 * * * * ?");
```
#### 3.4 FixedRate类型操作
```java
//以FixedRate模式启动定时任务
//上一次开始执行之后2秒后再执行,首次运行延迟1秒
superScheduledManager.addFixedRateScheduled(name, 2000L,1000L);
//首次运行不进行延迟
superScheduledManager.addFixedRateScheduled(name, 2000L);
//将定时任务转为FixedRate模式运行,并修改执行间隔的参数值
superScheduledManager.setScheduledFixedRate(name, 2000L);
```
#### 3.5 FixedDelay类型操作
```java
//以FixedDelay模式启动定时任务
//上一次执行完毕之后2秒后再执行,首次运行延迟1秒
superScheduledManager.addFixedDelayScheduled(name, 2000L,1000L);
//首次运行不进行延迟
superScheduledManager.addFixedDelayScheduled(name, 2000L);
//将定时任务转为FixedDelay模式运行,并修改执行间隔的参数值
superScheduledManager.setScheduledFixedDelay(name, 2000L);
```
#### 3.6 手动执行一次
```java
superScheduledManager.runScheduled(name);
```
#### 3.7 获取日志文件信息
```java
superScheduledManager.getScheduledLogFiles();
```
#### 3.8 获取日志信息
```java
superScheduledManager.getScheduledLogs(fileName);
```
#### 3.9 结束正在执行中的任务,跳过这次运行
**只有在每个前置增强器结束之后才会判断是否需要跳过此次运行**
```java
superScheduledManager.callOffScheduled(name);
```
### 4.Api接口
#### 4.1 获取所有定时任务
`GET` /scheduled/name/all
#### 4.2 获取启动的定时任务
`GET` /scheduled/name/run
#### 4.3 手动执行一次任务
`POST` /scheduled/{name}/run
#### 4.4 终止定时任务
`DELETE` /scheduled/{name}
#### 4.5 cronApi
##### 4.5.1 以cron类型启动Scheduled
`POST` /scheduled/cron/{name}/add <br/>
参数:`text` \[cron\]
##### 4.5.2 将定时任务转为cron模式运行,并修改cron的参数值
`POST` /scheduled/cron/{name}/set <br/>
参数:`text` \[cron\]
#### 4.6 fixedDelayApi
##### 4.6.1 以FixedDelay模式启动定时任务
`POST` /scheduled/fixedDelay/{name}/add/{fixedDelay}/{initialDelay}
##### 4.6.2 以FixedDelay模式启动定时任务(不延迟)
`POST` /scheduled/fixedDelay/{name}/add/{fixedDelay}
##### 4.6.3 将定时任务转为FixedDelay模式运行,并修改执行间隔的参数值
`POST` /scheduled/fixedDelay/{name}/set/{fixedDelay}
#### 4.7 fixedRateApi
##### 4.7.1 以FixedRate模式启动定时任务
`POST` /scheduled/fixedRate/{name}/add/{fixedRate}/{initialDelay}
##### 4.7.2 以FixedRate模式启动定时任务(不延迟)
`POST` /scheduled/fixedRate/{name}/add/{fixedRate}
##### 4.7.3 将定时任务转为FixedRate模式运行,并修改执行间隔的参数值
`POST` /scheduled/fixedRate/{name}/set/{fixedRate}
#### 4.8 获取日志文件信息
`GET` /scheduled/log/files
#### 4.9 获取日志信息
`GET` /scheduled/log/{fileName}
#### 4.10 结束正在执行中的任务,跳过这次运行
**只有在每个前置增强器结束之后才会判断是否需要跳过此次运行**
`POST` /scheduled/{name}/callOff
### 5.扩展接口
#### 5.1 扩展样例
1. 将类注入到spring容器中
2. 实现BaseStrengthen接口
3. 使用@SuperScheduledOrder(int)注解实现执行优先级控制,int值越大优先级越高,默认值为0
```java
@Component
@SuperScheduledOrder(1)
public class Strong implements BaseStrengthen {
/**
* 前置强化方法
*
* @param bean bean实例(或者是被代理的bean)
* @param method 执行的方法对象
* @param args 方法参数
* @param con
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot的定时调用的加强工具,实现定时任务动态管理,后续加入可视化管理、调度日志、集群任务统一管理.zip
共45个文件
java:39个
xml:1个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 99 浏览量
2024-05-05
07:35:26
上传
评论
收藏 49KB ZIP 举报
温馨提示
springboot Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot的定时调用的加强工具,实现定时任务动态管理,后续加入可视化管理、调度日志、集群任务统一管理.zip (45个子文件)
新建文本文档.txt 2KB
super-scheduled-master
pom.xml 5KB
src
main
resources
META-INF
spring.factories 136B
java
com
gyx
superscheduled
SuperScheduledAutoConfiguration.java 4KB
api
manager
ScheduledNameApi.java 822B
ScheduledFixedRateApi.java 2KB
ScheduledBaseApi.java 2KB
ScheduledCronApi.java 763B
ScheduledFixedDelayApi.java 2KB
core
SuperScheduledConfig.java 4KB
SuperScheduledManager.java 8KB
RunnableInterceptor
strengthen
ColonyStrengthen.java 3KB
LogStrengthen.java 3KB
ExecutionFlagStrengthen.java 2KB
BaseStrengthen.java 2KB
RunnableBaseInterceptor.java 2KB
SuperScheduledRunnable.java 3KB
SuperScheduledApplicationRunner.java 5KB
ScheduledFutureFactory.java 2KB
SuperScheduledPostProcessor.java 4KB
strategy
CronStrategy.java 603B
ScheduleStrategy.java 393B
FixedDelayStrategy.java 1KB
FixedRateStrategy.java 1KB
enums
ScheduledType.java 914B
common
constant
ZooKeeperConstant.java 206B
annotation
SuperScheduledOrder.java 266B
SuperScheduledInteriorOrder.java 274B
utils
proxy
Chain.java 720B
Point.java 1KB
ProxyUtils.java 831B
SerializableUtils.java 3KB
AnnotationUtils.java 2KB
model
ScheduledSource.java 5KB
ScheduledRunningContext.java 704B
IncObjectOutputStream.java 879B
ScheduledLog.java 2KB
ScheduledLogFile.java 956B
exception
SuperScheduledException.java 377B
properties
ThreadPoolTaskSchedulerProperties.java 1KB
PlugInProperties.java 1KB
ZooKeeperProperties.java 1KB
LICENSE 9KB
.gitignore 41B
README.md 11KB
共 45 条
- 1
资源评论
野生的狒狒
- 粉丝: 3396
- 资源: 2436
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功