惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
GbyAI
GbyAI
爱范儿
爱范儿
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
M
MIT News - Artificial intelligence
量子位
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
V
Visual Studio Blog
罗磊的独立博客
F
Fortinet All Blogs
美团技术团队
博客园_首页
博客园 - 【当耐特】
L
LangChain Blog
月光博客
月光博客
腾讯CDC
The Cloudflare Blog
D
Docker
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 蜗牛无敌

管理心得-协调 项目git 提交 hooks excel 公式支持 ~ - flowable-ui本地部署 mqtt实战 自动生成提示 修改表中数据时候,关联查询,例如删除一张表中 小于最大时间的sql, rocketmq-spring-boot-starter的使用 MYSQL ORDER BY 自定义排序 java程序cpu飘高排查 window canal的本地部署 python使用selenium框架模拟登录 获取token,并打包成exe spring-cloud-stater-stream-rocketmq springboot mybatisplus 使用拦截器改写sql语句 spring-cloud-stream-rocketmq实现消息的顺序消息 springboot 集成es 使用resthightlevel springboot 多租户环境下 由于业务需要搜集所有租户的基本数据 spring boot rockmq 生产者和消费者 实战 springboot为基础的项目 由于线上日志打印的级别较低,无法打印日志的方法 window系统关闭指定端口的应用方法
是用hutool工具实现动态定时任务
蜗牛无敌 · 2025-06-18 · via 博客园 - 蜗牛无敌

一、引入依赖

  <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.22</version>
        </dependency>

 二、编写动态任务管理器

package com.tuling.dynamic.datasource.controller;

import com.tuling.dynamic.datasource.cron_task.DynamicCronTaskManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/***
* @Author 徐庶 QQ:1092002729
* @Slogan 致敬大师,致敬未来的你
*/
@RestController
@RequestMapping("task")
@Slf4j
public class TaskController {

/**
* 添加任务
*
* @return
*/
@GetMapping(value = "addTask1")
public String addTask1() {
//注意 logiclid任务业务id cron 都是自定义的 可以写入数据库中
return DynamicCronTaskManager.addTask("*/3 * * * * *", "task1", () -> {
log.error("任务1正在执行...");
});
}

/**
* 添加任务
*
* @return
*/
@GetMapping(value = "addTask2")
public String addTask2() {
//注意 logiclid任务业务id cron 都是自定义的 可以写入数据库中
return DynamicCronTaskManager.addTask("*/5 * * * * *", "task2", () -> {
log.error("任务2正在执行...");
});
}

@GetMapping("addDelayedTask")
public void addDelayedTask() {
DynamicCronTaskManager.addDelayedTask(
5, // 延迟5
"*/5 * * * * *", // 每隔3秒执行一次
"delayedTask",
() -> {
log.error("【定时任务】延迟任务正在执行...");
}
);
}

/**
* 删除任务
*
* @param logicalId 任务的业务id
*/
@GetMapping(value = "delTask")
public void delTask(String logicalId) {
DynamicCronTaskManager.removeTask(logicalId);
}

}

三、编写测试类

package com.tuling.dynamic.datasource.controller;

import com.tuling.dynamic.datasource.cron_task.DynamicCronTaskManager;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("task")
@Slf4j
public class TaskController {

/**
* 添加任务
* @return
*/
@GetMapping(value = "addTask1")
public String addTask1() {
//注意 logiclid任务业务id cron 都是自定义的 可以写入数据库中
return DynamicCronTaskManager.addTask("*/3 * * * * *", "task1", () -> {
log.error("任务1正在执行...");
});
}

/**
* 添加任务
* @return
*/
@GetMapping(value = "addTask2")
public String addTask2() {
//注意 logiclid任务业务id cron 都是自定义的 可以写入数据库中
return DynamicCronTaskManager.addTask("*/5 * * * * *", "task2", () -> {
log.error("任务2正在执行...");
});
}

/**
* 添加延迟任务
*/
@GetMapping("addDelayedTask")
public void addDelayedTask() {
DynamicCronTaskManager.addDelayedTask(
5, // 延迟5
"*/5 * * * * *", // 每隔3秒执行一次
"delayedTask",
() -> {
log.error("【定时任务】延迟任务正在执行...");
}
);
}


/**
* 删除任务
* @param logicalId 任务的业务id
*/
@GetMapping(value = "delTask")
public void delTask(String logicalId) {
DynamicCronTaskManager.removeTask(logicalId);
}

}