Spring Boot 定时任务有多种实现方式,我在一个微型项目中通过注解方式执行定时任务。

具体执行的任务,通过多线程方式执行,单线程执行需要1小时的任务,多线程下5分钟就完成了。

执行效率提升10倍以上,执行效率提升10倍以上,执行效率提升10倍以上。

重要的事情说三遍!

本文不深入介绍具体的原理,大家如果要实现类似的功能,只需要执行下面1~5即可。

至于为什么是上图,而不直接贴代码。直接上代码排版不齐,需要的可以留邮箱,我发给你。

(1)定时任务实现

在需要定时执行的的方法上面增加注解 @Scheduled(cron="01 00 17 * * ?")   //[秒] [分] [小时] [日] [月] [周] [年]。

其中cron类似于Linux定时执行的写法,上述表示该任务每天17:00执行一次。

(2)定时任务方法内部多线程执行的部分

需要多线程执行的部分,要重新定义一个类,然后注入该类的变量。如我这里定义了一个类DoBackupTask,在这个类中通过多线程方式执行任务。

(3)多线程实现部分

多线程执行方法上,增加注解@Async("taskExecutor"),参数为线程池的名称

(4)线程池实现

线程池我定义了一个类,在该类中定义了一个方法asyncExecutor。该方法生成ThreadPoolTaskExecutor的一个对象,设置线程数量,线程池的名称等参数。

(5)当上述步骤都做好了,然而并没有效果。可能你漏了最关键的一步:在应用启动类上,增加注解

@EnableScheduling 启用多线程
@EnableAsync 异步执行

如果还是不清楚具体位置,就找@SpringBootApplication这个注解,放在一起就可以了。

Spring Boot 定时+多线程执行的更多相关文章

  1. 在Spring Boot启动后执行指定代码

    在开发时有时候需要在整个应用开始运行时执行一些特定代码,比如初始化环境,准备测试数据等等. 在Spring中可以通过ApplicationListener来实现相关的功能,不过在配合Spring Bo ...

  2. Spring Boot程序的执行流程

    Spring Boot的执行流程如下图所示:(图片来源于网络) 上图为SpringBoot启动结构图,我们发现启动流程主要分为三个部分,第一部分进行SpringApplication的初始化模块,配置 ...

  3. spring boot 定时备份数据库

    第一步 :添加mysqldump.exe 进环境变量 第二步  新建一个spring boot 项目,连接数据库 spring.datasource.url=jdbc:mysql://localhos ...

  4. Spring Boot Async异步执行

    异步调用就是不用等待结果的返回就执行后面的逻辑,同步调用则需要等带结果再执行后面的逻辑. 通常我们使用异步操作都会去创建一个线程执行一段逻辑,然后把这个线程丢到线程池中去执行,代码如下: Execut ...

  5. spring Boot打可执行的jar包

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  6. Spring Boot实践——多线程

    多线程 Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一 ...

  7. Spring Boot 之异步执行方法

    前言: 最近的时候遇到一个需求,就是当服务器接到请求并不需要任务执行完成才返回结果,可以立即返回结果,让任务异步的去执行.开始考虑是直接启一个新的线程去执行任务或者把任务提交到一个线程池去执行,这两种 ...

  8. spring boot 启动后执行初始化方法

    http://blog.csdn.net/catoop/article/details/50501710 1.创建实现接口 CommandLineRunner 的类 package org.sprin ...

  9. spring boot启动后执行方法

    @Componentpublic class InitProject implements ApplicationRunner { private static final Logger logger ...

随机推荐

  1. 微信服务号获得openid 跟用户信息

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxx&redirect_uri=http://www. ...

  2. Request中getContextPath、getServletPath、getRequestURI、request.getRealPath的区别

    1 区别 假定你的web application 名称为news,你在浏览器中输入请求路径: http://localhost:8080/news/main/list.jsp 1.1 System.o ...

  3. Flask学习之六 个人资料和头像

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vi-profile-page-and-avatars ...

  4. oracle函数 months_between(d1,d2)

    [功能]:返回日期d1到日期d2之间的月数. [参数]:d1,d2 日期型 [返回]:数字 如果d1>d2,则返回正数 如果d1<d2,则返回负数 [示例] select sysdate, ...

  5. @atcoder - ARC066F@ Contest with Drinks Hard

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定序列 T1, T2, ... TN,你可以从中选择一些 Ti ...

  6. Android 字体库的使用

    开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认情况下,TextView  的 typeface 属性支持 "Sans","serif&qu ...

  7. Tyvj 1864 [Poetize I]守卫者的挑战

    P1864 [Poetize I]守卫者的挑战时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻 ...

  8. Mysql错误:#1054 - Unknown column 'id' in 'field list' 解决办法

    第一次用mysql,在插入数据时,竟然报这样的错误, #1054 - Unknown column 'id' in 'field list'

  9. ACM感想、

    从15年10月开始搞ACM,到如今的16年4月底,已经接近半年了. 大一下学期开始ACM组的人员就不断减少,有的因为坚持不下,有的因为不喜欢,有的没留下理由就走了, 瞬间感觉实验室空了很多很多.现在常 ...

  10. Typeahead

    翻译自官网:https://angular-ui.github.io/bootstrap/#/typeahead Typeahead可以在输入框输入时有只能提示的作用. 参数设置: 1) ng-mod ...