在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:super-scheduled开源软件地址:https://gitee.com/qiaodaimadewangcai/super-scheduled开源软件介绍:SpringBoot的定时任务动态管理SpringBoot的定时任务的加强工具,实现定时任务动态管理,完全兼容原生@Scheduled注解,无需对原本的定时任务进行修改 引入jar包<dependency> <groupId>com.github.guoyixing</groupId> <artifactId>spring-boot-starter-super-scheduled</artifactId> <version>0.3.4</version></dependency> 原理说明https://keyboard-dog.blog.csdn.net/article/details/106494637 配置参数1.配置定时任务线程池(不配置时采用默认参数)#线程池大小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.扩展插件配置#开启执行标志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配置#设置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@SpringBootApplication@EnableSchedulingpublic class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); }} @Componentpublic 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.定时任务动态管理@RunWith(SpringRunner.class)@SpringBootTestpublic 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 获取所有定时任务List<String> allSuperScheduledName = superScheduledManager.getAllSuperScheduledName(); 3.1 获取所有启动的定时任务List<String> runScheduledName = superScheduledManager.getRunScheduledName(); 3.2 终止定时任务superScheduledManager.cancelScheduled(name); 3.3 cron类型操作//以cron模式启动定时任务superScheduledManager.addCronScheduled(name, "0/2 * * * * ?");//将定时任务转为cron模式运行,并修改cron的参数值superScheduledManager.setScheduledCron(name, "0/2 * * * * ?"); 3.4 FixedRate类型操作//以FixedRate模式启动定时任务//上一次开始执行之后2秒后再执行,首次运行延迟1秒superScheduledManager.addFixedRateScheduled(name, 2000L,1000L);//首次运行不进行延迟superScheduledManager.addFixedRateScheduled(name, 2000L);//将定时任务转为FixedRate模式运行,并修改执行间隔的参数值superScheduledManager.setScheduledFixedRate(name, 2000L); 3.5 FixedDelay类型操作//以FixedDelay模式启动定时任务//上一次执行完毕之后2秒后再执行,首次运行延迟1秒superScheduledManager.addFixedDelayScheduled(name, 2000L,1000L);//首次运行不进行延迟superScheduledManager.addFixedDelayScheduled(name, 2000L);//将定时任务转为FixedDelay模式运行,并修改执行间隔的参数值superScheduledManager.setScheduledFixedDelay(name, 2000L); 3.6 手动执行一次superScheduledManager.runScheduled(name); 3.7 获取日志文件信息superScheduledManager.getScheduledLogFiles(); 3.8 获取日志信息superScheduledManager.getScheduledLogs(fileName); 3.9 结束正在执行中的任务,跳过这次运行只有在每个前置增强器结束之后才会判断是否需要跳过此次运行 superScheduledManager.callOffScheduled(name); 4.Api接口4.1 获取所有定时任务
4.2 获取启动的定时任务
4.3 手动执行一次任务
4.4 终止定时任务
4.5 cronApi4.5.1 以cron类型启动Scheduled
4.5.2 将定时任务转为cron模式运行,并修改cron的参数值
4.6 fixedDelayApi4.6.1 以FixedDelay模式启动定时任务
4.6.2 以FixedDelay模式启动定时任务(不延迟)
4.6.3 将定时任务转为FixedDelay模式运行,并修改执行间隔的参数值
4.7 fixedRateApi4.7.1 以FixedRate模式启动定时任务
4.7.2 以FixedRate模式启动定时任务(不延迟)
4.7.3 将定时任务转为FixedRate模式运行,并修改执行间隔的参数值
4.8 获取日志文件信息
4.9 获取日志信息
4.10 结束正在执行中的任务,跳过这次运行只有在每个前置增强器结束之后才会判断是否需要跳过此次运行 5.扩展接口5.1 扩展样例
@Component@SuperScheduledOrder(1)public class Strong implements BaseStrengthen { /** * 前置强化方法 * * @param bean bean实例(或者是被代理的bean) * @param method 执行的方法对象 * @param args 方法参数 * @param context 任务线程运行时的上下文 */ @Override public void before(Object bean, Method method, Object[] args, ScheduledRunningContext context) { System.out.println("定时任务执行前运行"); } /** * 后置强化方法 * * @param bean bean实例(或者是被代理的bean) * @param method 执行的方法对象 * @param args 方法参数 * @param context 任务线程运行时的上下文 */ @Override public void after(Object bean, Method method, Object[] args, ScheduledRunningContext context) { System.out.println("定时任务执行成功后运行"); } /** * 异常强化方法 * * @param bean bean实例(或者是被代理的bean) * @param method 执行的方法对象 * @param args 方法参数 * @param context 任务线程运行时的上下文 */ @Override public void exception(Object bean, Method method, Object[] args, ScheduledRunningContext context) { System.out.println("定时任务执行异常时运行"); } /** * Finally强化方法,出现异常也会执行 * * @param bean bean实例(或者是被代理的bean) * @param method 执行的方法对象 * @param args 方法参数 * @param context 任务线程运行时的上下文 */ @Override public void afterFinally(Object bean, Method method, Object[] args, ScheduledRunningContext context) { System.out.println("定时任务执行完成后运行(异常时也运行)"); }} 5.2 更多样例更多样例参考: 6.集群模式6.1基于zookeeper的集群模式部署多服务的时候,会限制定时任务的执行,防止同一个任务在多个服务上反复运行 6.1.1开启zk集群模式spring.super.scheduled.plug-in.colony=true#设置zookeeper地址,zookeeper集群多个地址用英文逗号隔开spring.super.scheduled.zookeeper.url=127.0.0.1:2181#设置zookeeper session超时时间,默认值为60秒spring.super.scheduled.zookeeper.sessionTimeout=60000#设置zookeeper连接超时时间,默认值为60秒spring.super.scheduled.zookeeper.connectionTimeout=60000 版本更新0.1.0版
0.2.0版
0.2.1版
0.3.0版
0.3.1版
0.3.2版
0.3.3版
0.3.4版
后续计划
|
请发表评论