解决SpringBoot使用默认定时任务配置有时不执行问题。
在springboot中我们只需要配置类似 **@Scheduled(cron = "0 10 11 * * ? ")**就可以实现定时任务。
然而在生产过程中我发现部分定时任务并不能按时执行,甚至没有执行。
这是因为springboot的定时任务默认是串行的,也就是说,如果上一个定时任务未执行完,系统不会触发下一个定时任务的执行。
那么我们怎样修改使得定时任务支持并行的呢?
我们需要添加一个定时任务配置类,具体的代码如下。
/**
* @author FeianLing
* @date 2019/9/29
*/
@Configuration
public class ScheduledConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
Method[] methods = BatchProperties.Job.class.getMethods();
int defaultPoolSize = 4;
int corePoolSize = 0;
if (methods != null && methods.length > 0) {
for (Method method : methods) {
Scheduled annotation = method.getAnnotation(Scheduled.class);
if (annotation != null) {
corePoolSize++;
}
}
if (defaultPoolSize > corePoolSize) {
corePoolSize = defaultPoolSize;
}
}
scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(corePoolSize));
}
}