功能篇:SpringBoot 实现静态、动态定时任务,本地动态定时任务调度

在Spring Boot中实现静态和动态定时任务可以通过使用`@Scheduled`注解来配置静态的调度任务,以及通过编程方式创建动态的调度任务。下面我将分别介绍这两种方式。

静态定时任务

对于静态定时任务,你可以直接在方法上使用`@Scheduled`注解,并指定cron表达式、fixedRate或fixedDelay等参数来定义任务执行的时间规则。例如:

```java

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

@Component

public class StaticTask {

// 使用cron表达式定义每分钟第30秒执行一次

@Scheduled(cron = "30 * * * * ?")

public void performTask() {

System.out.println("Static scheduled task is running...");

}

}

```

动态定时任务

为了实现动态定时任务,你需要手动管理`ScheduledFuture`对象,这通常涉及到使用`TaskScheduler`接口提供的功能。你可以在启动类或者配置类中启用调度功能,并且创建一个服务来管理这些任务。

首先确保你的Spring Boot应用已经启用了调度功能:

```java

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication

@EnableScheduling

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

```

然后,你可以创建一个服务来添加、更新或移除动态任务:

```java

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

import org.springframework.scheduling.support.CronTrigger;

import org.springframework.stereotype.Service;

@Service

public class DynamicTaskService {

private final ThreadPoolTaskScheduler taskScheduler;

public DynamicTaskService() {

this.taskScheduler = new ThreadPoolTaskScheduler();

this.taskScheduler.initialize();

}

public ScheduledFuture<?> addDynamicTask(Runnable task, String cronExpression) {

return taskScheduler.schedule(task, new CronTrigger(cronExpression));

}

public void removeDynamicTask(ScheduledFuture<?> future) {

if (future != null && !future.isCancelled()) {

future.cancel(true);

}

}

}

```

在这个例子中,`addDynamicTask` 方法允许你根据传入的 `cronExpression` 和 `task` 来安排一个新的任务,而 `removeDynamicTask` 方法可以取消已有的任务。

请注意,上述代码片段仅提供了一个简单的示例,实际应用中可能需要更复杂的逻辑来处理并发、持久化任务状态等问题。此外,在本地开发环境中测试动态调度时,请确保正确地管理了任务生命周期,避免内存泄漏或其他潜在问题。

相关推荐
白衣鸽子7 小时前
【基础数据篇】数据遍历大师:Iterator模式
后端·设计模式
用户4099322502127 小时前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
后端·ai编程·trae
艾菜籽7 小时前
SpringMVC练习:加法计算器与登录
java·spring boot·spring·mvc
xuejianxinokok7 小时前
什么是代数类型 ? java为什么要添加record,Sealed class 和增强switch ?
后端·rust
洛小豆7 小时前
Git打标签仓库看不到?她说:豆子,你又忘了加 --tags!
git·后端·github
LawsonJin7 小时前
springboot实现微信小程序支付(服务商和普通商户模式)
spring boot·后端·微信小程序
福大大架构师每日一题8 小时前
2025-10-16:有向无环图中合法拓扑排序的最大利润。用go语言,给定一个由 n 个节点(编号 0 到 n-1)构成的有向无环图,边集合用二维数组 edge
后端
只玩代码8 小时前
技术拆解:基于 Rokid CXR-M SDK 构建“AI 实时翻译眼镜伴侣”核心逻辑
后端
码码宇8 小时前
技术拆解:Rokid CXR-M SDK 如何构建流畅AR演讲提词功能
后端
沐眼8 小时前
技术拆解:Rokid CXR-M SDK 构建 AI 智能提词眼镜助手连接到场景落地
后端