• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

super-scheduled: SpringBoot的定时调用的加强工具,实现定时任务动态管理,后续加入 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

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 获取所有定时任务

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
参数:text [cron]

4.5.2 将定时任务转为cron模式运行,并修改cron的参数值

POST /scheduled/cron/{name}/set
参数: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
@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 更多样例

更多样例参考:
执行标记增强器:com.gyx.superscheduled.core.RunnableInterceptor.strengthen.ExecutionFlagStrengthen
执行日志增强器:com.gyx.superscheduled.core.RunnableInterceptor.strengthen.LogStrengthen

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版

  • 只兼容原生@Scheduled注解cron属性

0.2.0版

  • 完全兼容原生@Scheduled注解

0.2.1版

  • 完善Manager功能
  • 修复大量bug

0.3.0版

  • 添加api接口
  • 添加定时任务线程池配置

0.3.1版

  • 添加扩展接口

0.3.2版

  • 添加定时任务调度日志

0.3.3版

  • 添加任务线程运行时上下文
  • 添加跳过当前执行任务的能力
  • 添加扩展类的执行优先级

0.3.4版

  • 添加基于zookeeper的集群模式
  • 修复跳过单次运行产生的bug

后续计划

  • 后续加入可视化管理
  • 集群任务统一管理

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap