Spring 定时任务总结

一直以来,定时任务一直使用 Spring@Sheduled 注解来执行,但总是遇到各种问题,导致任务挂掉。而不同的应用场景,使用的方案也不尽相同。

代码大体框架

  • ScheduledComponent : 任务组件模块,包括 service,dao 等底层处理逻辑。
  • ScheduledWorker:任务处理模块,完成任务的完整逻辑。
  • ScheduledJob:定时任务启动模块。

1. 任务周期较长,任务能够在任务周期内单线程完成。

component

1
2
3
4
@Component
public class ScheduledComponent{
//some service, mapper methods
}

worker

1
2
3
public class ScheduledWorker{
//
}

job

1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class Scheduledjob {
private static ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
@Autowired
private ScheduledComponent scheduledComponent;
@Scheduled(cron = expression)
public void cronTask(){
ScheduledWorker scheduledWorker = new ScheduledWorker(scheduledComponent);
executor.schedule(scheduledWorker, 1000, TimeUnit.MILLISECONDS);
}
}