package com.github.jitwxs.sample.ds.test;
import com.github.jitwxs.sample.ds.config.AbstractDSHandler;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
/**
* @author jitwxs
* @date 2021年03月27日 21:54
*/
@Component
public class SchedulerTestDSHandler extends AbstractDSHandler<SchedulerTestTaskInfo> implements ApplicationListener {
public volatile List<SchedulerTestTaskInfo> taskInfoList = Collections.singletonList(
SchedulerTestTaskInfo.builder()
.id(1)
.cron("0/10 * * * * ? ")
.isValid(true)
.reference("com.github.jitwxs.sample.ds.test.SchedulerTest#foo")
.build()
);
@Override
protected List<SchedulerTestTaskInfo> listTaskInfo() {
return taskInfoList;
}
@Override
protected void doProcess(SchedulerTestTaskInfo taskInfo) throws Throwable {
final String reference = taskInfo.getReference();
final String[] split = reference.split("#");
if(split.length != 2) {
return;
}
try {
final Class<?> clazz = Class.forName(split[0]);
final Method method = clazz.getMethod(split[1]);
method.invoke(clazz.newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> {
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(10));
// setting 1 seconds execute
taskInfoList = Collections.singletonList(
SchedulerTestTaskInfo.builder()
.id(1)
.cron("0/1 * * * * ? ")
.isValid(true)
.reference("com.github.jitwxs.sample.ds.test.SchedulerTest#foo")
.build()
);
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(10));
// setting not valid
taskInfoList = Collections.singletonList(
SchedulerTestTaskInfo.builder()
.id(1)
.cron("0/1 * * * * ? ")
.isValid(false)
.reference("com.github.jitwxs.sample.ds.test.SchedulerTest#foo")
.build()
);
LockSupport.parkNanos(TimeUnit.SECONDS.toNanos(10));
// setting valid
taskInfoList = Collections.singletonList(
SchedulerTestTaskInfo.builder()
.id(1)
.cron("0/1 * * * * ? ")
.isValid(true)
.reference("com.github.jitwxs.sample.ds.test.SchedulerTest#foo")
.build()
);
}, 12, 86400, TimeUnit.SECONDS);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在Spring框架中,定时任务是应用中不可或缺的一部分,它允许我们按照预定的时间间隔执行特定的任务。Spring提供了多种方式来实现定时任务,其中一种是通过`SchedulingConfigurer`接口。本篇将详细介绍如何利用`SchedulingConfigurer`实现动态定时任务,并结合完整的源码和数据库设置,帮助你更好地理解和应用这一功能。 `SchedulingConfigurer`接口是Spring提供的用于自定义调度配置的接口,它提供了一个`configureTasks(ScheduledTaskRegistrar registrar)`方法,让我们可以在运行时配置定时任务。相比使用`@Scheduled`注解,使用`SchedulingConfigurer`可以更灵活地在程序运行过程中添加、修改或删除定时任务,这对于需要动态管理任务的场景非常有用。 1. **配置步骤**: - 创建一个类实现`SchedulingConfigurer`接口。 - 在实现的`configureTasks(ScheduledTaskRegistrar registrar)`方法中,通
资源推荐
资源详情
资源评论
收起资源包目录
dynami342ewert-sample.zip (9个子文件)
pom.xml 3KB
dynami342ewert-sample
pom.xml 898B
src
main
java
com
github
jitwxs
sample
ds
test
SchedulerTest.java 374B
SchedulerTestTaskInfo.java 851B
SchedulerTestDSHandler.java 3KB
DSApplication.java 498B
config
IDSTaskInfo.java 452B
AbstractDSHandler.java 3KB
DSContainer.java 3KB
共 9 条
- 1
资源评论
程序猿小D
- 粉丝: 4162
- 资源: 825
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用NetBeans连接SQLserver2008数据库教程中文WORD版最新版本
- XPath实例中文WORD版最新版本
- XPath语法规则中文WORD版最新版本
- XPath入门教程中文WORD版最新版本
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功