自学内容网 自学内容网

springboot 定时任务解决方案

@Scheduled (springboot 自带的 注解)

基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。

@EnableScheduling注解: 在配置类上使用,开启计划任务的支持(类上)。

@Scheduled注解: 来声明这是一个任务,包括 cron (可通过在线生成Cron表达式的工具:网址http://cron.qqe2.com/ 来生成自己想要的表达式。),fixDelay,fixRate 等类型(方法上,需先开启计划任务的支持)。

@Slf4j
@Configuration
public class TastOne {

    // 可以从IOC容器中获取到对应的Service
    @Autowired
    private TestService testService;

    @Scheduled(cron = "0/1 * * * * ?")
    public void out(){
        log.info("正在执行定时任务输出方法..............");
    }
}

开启多线程


private final int corePoolSize = Runtime.getRuntime().availableProcessors();
/**
 * 此处方法名为Bean的名字,方法名无需固定
 * 因为是按TaskScheduler接口自动注入
 */
@Bean
public TaskScheduler taskScheduler(){
    // Spring提供的定时任务线程池类
    ThreadPoolTaskScheduler taskScheduler=new ThreadPoolTaskScheduler();
    //设定最大可用的线程数目
    taskScheduler.setPoolSize(corePoolSize);
    return taskScheduler;
}

注意 禁止 启动类加@EnableAsync,Scheduled加@Async 这么使用

原因:@Async的使用场景和这个不同,用在这里并不合适,虽然也会实现多线程,但是会产生任务重复执行的问题,也会使 fixedDelay策略失效。 ​

参考 spring 注解实现定时任务详解

xxl-job框架

在实际项目中,90%都是用的XXL-JOB,因为它易用性最好。
xxl-job官网

待续…

定时任务放线程池
spring task实现

springboot 注解形式


原文地址:https://blog.csdn.net/weixin_46591962/article/details/138506870

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!