Java spring 定时任务每20分钟定时任务设为单步,即上一个定时任务没跑完本次定时任务步启动
时间: 2024-08-13 15:06:19 浏览: 64
在Java Spring中,要实现每20分钟的单步定时任务,通常我们会使用Spring的`@Scheduled`注解配合`Quartz`或`Spring Scheduler`这样的任务调度框架。这里我们以`Spring Scheduler`为例,因为它相对简单一些:
首先,你需要在Spring配置文件(如application.properties或application.yml)中设置定时任务间隔,例如每20分钟:
```properties
spring:scheduler:task-creation-enabled=true
scheduler:job-store-type=memory
scheduler:concurrent-executors=1
scheduler:quartz.initialized-converter-class-name=org.springframework.scheduling.quartz.SimplifiableTriggerConverter
scheduler:update-triggers=true
scheduler:job-store-misfire-handling=ABANDON
scheduler:job-store-time-zone=UTC
```
然后,在Spring配置类中,定义一个`@Component`的类,其中包含一个`@Scheduled(fixedRate = 20 * 60 * 1000)`的方法,这里的`fixedRate`参数表示任务执行的频率,单位是毫秒,20分钟转换为毫秒是1200000。
```java
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class SingleStepTimer {
@Scheduled(cron = "*/20 * * * *") // 使用cron表达式也可以实现每20分钟,这里是等效于固定间隔的写法
public void executeTask() {
// 在这里编写你的任务逻辑,确保上一个任务完成后再执行当前任务
if (previousTaskCompleted()) {
// 你的任务代码
System.out.println("Executing task at " + LocalDateTime.now());
} else {
System.out.println("Previous task not completed, skipping...");
}
}
private boolean previousTaskCompleted() {
// 如果需要检查上一个任务是否已完成,你可以在这里实现,比如使用数据库的状态标记或者线程锁等机制
// 假设这里只是做一个示例,可以返回true
return true;
}
}
```