Spring Boot定时+多线程执行过程解析
这篇文章主要介绍了Spring Boot定时+多线程执行过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
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这个注解,放在一起就可以了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
SpringBoot实现动态定时任务
项目情况: 在当前项目中需要一个定时任务来清除过期的校验码,如果使用数据库存储过程的话不方便维护.因此采用SpringBoot自带的方式来设置定时任务. 技术说明: SpringBoot自带的方式有两种可以实现: 一种是使用@Scheduled注解的方式,只需要在启动类或者它所在的类上添加@EnableScheduling注解允许执行定时任务,并且设置Schecduled注解的参数,诸如: 1.cron是设置定时执行的表达式,如 0 0/5 * * * ?每隔五分钟执行一次 2.zone表示执行
-
Spring Boot中配置定时任务、线程池与多线程池执行的方法
配置基础的定时任务 最基本的配置方法,而且这样配置定时任务是单线程串行执行的,也就是说每次只能有一个定时任务可以执行,可以试着声明两个方法,在方法内写一个死循环,会发现一直卡在一个任务上不动,另一个也没有执行. 1.启动类 添加@EnableScheduling开启对定时任务的支持 @EnableScheduling @SpringBootApplication public class TestScheduledApplication extends SpringBootServletInit
-
Spring boot如何通过@Scheduled实现定时任务及多线程配置
这篇文章主要介绍了Spring boot如何通过@Scheduled实现定时任务及多线程配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用@Scheduled 可以很容易实现定时任务 spring boot的版本 2.1.6.RELEASE package com.abc.demo.common; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.spr
-
spring-boot 多线程并发定时任务的解决方案
刚刚看了下Spring Boot实现定时任务的文章,感觉还不错.Spring Boot 使用Spring自带的Schedule来实现定时任务变得非常简单和方便.在这里个大家分享下. 开启缓存注解 @SpringBootApplication @EnableScheduling //开启定时任务 public class Application { public static void main(String[] args) { SpringApplication.run(Application.
-
springboot schedule 解决定时任务不执行的问题
@schedule 注解 是springboot 常用的定时任务注解,使用起来简单方便,但是如果定时任务非常多,或者有的任务很耗时,会影响到其他定时任务的执行,因为schedule 默认是单线程的,一个任务在执行时,其他任务是不能执行的.解决办法是重新配置schedule,改为多线程执行.只需要增加下面的配置类就可以了. import org.springframework.boot.autoconfigure.batch.BatchProperties; import org.springfr
-
详解Spring Boot 中实现定时任务的两种方式
在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策略,当然也支持 Quartz,本文我们就来看下 Spring Boot 中两种定时任务的实现方式. @Scheduled 使用 @Scheduled 非常容易,直接创建一个
-
Spring Boot定时+多线程执行过程解析
这篇文章主要介绍了Spring Boot定时+多线程执行过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring Boot 定时任务有多种实现方式,我在一个微型项目中通过注解方式执行定时任务. 具体执行的任务,通过多线程方式执行,单线程执行需要1小时的任务,多线程下5分钟就完成了. 执行效率提升10倍以上,执行效率提升10倍以上,执行效率提升10倍以上. 重要的事情说三遍! 本文不深入介绍具体的原理,大家如果要实现类似的功能,只需要
-
Spring Boot使用过滤器Filter过程解析
这篇文章主要介绍了Spring Boot使用过滤器Filter过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先我们说说什么是过滤器,过滤器是对数据进行过滤,预处理过程,当我们访问网站时,有时候会发布一些敏感信息,发完以后有的会用*替代,还有就是登陆权限控制等,一个资源,没有经过授权,肯定是不能让用户随便访问的,这个时候,也可以用到过滤器.过滤器的功能还有很多,例如实现URL级别的权限控制.压缩响应信息.编码格式等等. 过滤器依赖se
-
Spring Boot 整合 Shiro+Thymeleaf过程解析
这篇文章主要介绍了Spring Boot 整合 Shiro+Thymeleaf过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.导包 <!-- springboot 与 shiro 的集成--> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <
-
Spring Boot Logback配置日志过程解析
这篇文章主要介绍了Spring Boot Logback配置日志过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式. 配置时考虑点 支持日志路径,日志level等配置 日志控制配置通过application.yml下发 按天生成日志,当天的日志>50MB回滚 最多保存10天日志 生成的日志中Pattern自
-
Spring Boot启动流程断点过程解析
这篇文章主要介绍了Spring Boot启动流程断点过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 启动入口 跟进run方法 : 一个用来使用默认的配置从特定的源运行SpringApplication的静态帮助类. 这个类有两个重载方法,另一个用来传入多个源.通常,单个参数方法是数组方法的一个特例 创建一个新的SpringApplication实例.这个应用程序上下文会从特定的源加载Beans,这个实例会在调用run方法之前被定制化.
-
spring boot 2整合swagger-ui过程解析
这篇文章主要介绍了spring boot 2整合swagger-ui过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.添加mvn依赖 修改pom.xml加入 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.5.0</v
-
Spring Boot集成mongodb数据库过程解析
一.认识mongodb MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引. 二.Spring boot项目集成mongodb 1.添加mongodb依赖 <dependency> <gr
-
Spring boot热部署devtools过程解析
1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- optional=true,依赖不会传递,该项目依赖devtools:之后依赖myboot项目的项目如果想要使用d
-
Spring Boot Swagger2使用方法过程解析
1.添加Swagger2依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> &
-
spring boot jar的启动原理解析
1.前言 近来有空对公司的open api平台进行了些优化,然后在打出jar包的时候,突然想到以前都是对spring boot使用很熟练,但是从来都不知道spring boot打出的jar的启动原理,然后这回将jar解开了看了下,与想象中确实大不一样,以下就是对解压出来的jar的完整分析. 2.jar的结构 spring boot的应用程序就不贴出来了,一个较简单的demo打出的结构都是类似,另外我采用的spring boot的版本为1.4.1.RELEASE网上有另外一篇文章对spring
随机推荐
- 如何安装SQL Server 2008 Management Studio Express
- 在Python中移动目录结构的方法
- 详解JavaScript ES6中的模板字符串
- 浅析JavaScript动画
- jquery获取URL中参数解决中文乱码问题的两种方法
- 深入分析使用mysql_fetch_object()以对象的形式返回查询结果
- PHP连接操作access数据库实例
- Python中绑定与未绑定的类方法用法分析
- 在Linux中通过Python脚本访问mdb数据库的方法
- Python制作CSDN免积分下载器
- ASP简洁的多重查询的解决方案
- C++设计模式之观察者模式
- 在Linux系统的命令行中为MySQL创建用户的方法
- JS实现浏览器状态栏显示时间的方法
- jQuery实现ajax调用WCF服务的方法(附带demo下载)
- python利用lxml读写xml格式的文件
- 5分钟了解MySQL5.7中union all用法的黑科技
- 超链接的陷下效果
- iscroll-probe实现下拉刷新和下拉加载效果
- Apache Wind2003 配置网站目录权限小结