• springboot+task整合(定时任务)


    1.使用springboot自带的定时任务需要在启动类上添加注解

    @EnableAsync        // 启用异步任务
    @EnableScheduling   // 启用定时任务

    2.如果是异步定时任务则需要配置线程池

    1. /**
    2. * 定义异步任务执行的线程池
    3. */
    4. @Configuration
    5. public class TaskPoolConfig {
    6. @Bean("asyncExecutor1")
    7. public Executor taskExecutor1 () {
    8. ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    9. // 核心线程数10:线程池创建时候初始化的线程数
    10. executor.setCorePoolSize(10);
    11. // 最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
    12. executor.setMaxPoolSize(20);
    13. // 缓冲队列200:用来缓冲执行任务的队列
    14. executor.setQueueCapacity(200);
    15. // 允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
    16. executor.setKeepAliveSeconds(60);
    17. // 线程池名的前缀:设置好了之后可以方便定位处理任务所在的线程池
    18. executor.setThreadNamePrefix("asyncTask1-");
    19. /*
    20. 线程池对拒绝任务的处理策略:这里采用了CallerRunsPolicy策略,
    21. 当线程池没有处理能力的时候,该策略会直接在 execute 方法的调用线程中运行被拒绝的任务;
    22. 如果执行程序已关闭,则会丢弃该任务
    23. */
    24. executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
    25. // 设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
    26. executor.setWaitForTasksToCompleteOnShutdown(true);
    27. // 设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
    28. executor.setAwaitTerminationSeconds(600);
    29. return executor;
    30. }
    31. }

     3  .异步定时任务示例

    1. @Component
    2. public class AsyncTask {
    3. private static final Logger LOGGER = LoggerFactory.getLogger(AsyncTask.class) ;
    4. // 只配置了一个 asyncExecutor1 不指定也会默认使用
    5. @Async
    6. public void asyncTask0 () {
    7. try{
    8. Thread.sleep(6000);
    9. }catch (Exception e){
    10. e.printStackTrace();
    11. }
    12. LOGGER.info("======异步任务结束1======");
    13. }
    14. @Async("asyncExecutor1")
    15. public void asyncTask1 () {
    16. try{
    17. Thread.sleep(5000);
    18. }catch (Exception e){
    19. e.printStackTrace();
    20. }
    21. LOGGER.info("======异步任务结束2======");
    22. }
    23. }

    4.异步定时任务测试

    1. @RestController
    2. public class TaskController {
    3. @Resource
    4. private AsyncTask asyncTask ;
    5. @RequestMapping("/asyncTask")
    6. public String asyncTask (){
    7. asyncTask.asyncTask0();
    8. asyncTask.asyncTask1();
    9. return "成功" ;
    10. }
    11. }

     

    5.时间定时任务:

    使用@Scheduled开启定时任务,可以通过内置的属性来指定执行的时间规则,也可以使用CRON表达式

    1. /**
    2. * 时间定时任务
    3. */
    4. @Component
    5. public class TimeTask {
    6. Logger LOG = LoggerFactory.getLogger(TimeTask.class.getName()) ;
    7. private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
    8. /**
    9. * 每6秒打印一次系统时间
    10. */
    11. @Scheduled(fixedDelay = 6000)
    12. public void systemDate (){
    13. LOG.info("当前时间::::"+format.format(new Date()));
    14. }
    15. /*
    16. * @Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行
    17. * @Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行
    18. * @Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次
    19. * @Scheduled(cron="/5") :通过cron表达式定义规则
    20. */
    21. }

  • 相关阅读:
    如何有效管理产品生命周期(How to Effectively Manage a Product Lifecycle)
    HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站
    Linux 查看是否安装memcached
    Python 接口测试之接口请求方法封装
    IntelliJ IDEA - Github Copilot Waiting for Authorization [一篇必解决]
    第12章 PyTorch图像分割代码框架-2
    EasyNLP 中文文图生成模型带你秒变艺术家
    【ROS】树莓派3B+配合虚拟机ubuntu16.04实现远程小车控制
    安装淘宝镜像cnpm报错
    c++复合数据类型
  • 原文地址:https://blog.csdn.net/qq_44981598/article/details/132752396