Spring开启方法异步执行
转载自 Spring开启方法异步执行
@EnableAsync
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(AsyncConfigurationSelector.class)
public @interface EnableAsync {Class<? extends Annotation> annotation() default Annotation.class;boolean proxyTargetClass() default false;AdviceMode mode() default AdviceMode.PROXY;int order() default Ordered.LOWEST_PRECEDENCE;}
@EnableAsync注解即开启Spring对方法异步执行的能力,需要和注解@Configuration配合使用。
@Configuration
@EnableAsync
public class AppConfig {}
也可以自定义线程池
@Configuration@EnableAsyncpublic class AppConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(7);executor.setMaxPoolSize(42);executor.setQueueCapacity(11);executor.setThreadNamePrefix("MyExecutor-");executor.initialize();return executor;}@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return MyAsyncUncaughtExceptionHandler();}}
@Async
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Async {String value() default "";}
在要异步执行的方法上使用@Async注解,下面是一个没有返回值,一个带有返回值的异步调用的示例。
@Component
public class AsyncTask {@Asyncpublic void task1() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}@Asyncpublic Future<String> task2() {try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return new AsyncResult<String>("javastack"); }}
测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class AsyncTest {private final static Logger log = LoggerFactory.getLogger(AsyncTest.class);@Autowiredprivate AsyncTask asyncTask;@Testpublic void testTask1(){log.info("start");asyncTask.task1();log.info("finish");}@Testpublic void testTask2() {log.info("start");Future<String> future = asyncTask.task2();while (true) {if (future.isDone()) {try {log.info("result is " + future.get());} catch (Exception e) {e.printStackTrace();} break;}}log.info("finish");}}
注意事项
1、使用注意
@Async只能使用到被代理的对象方法上,即代理类的入口方法处,且方法必须是public的。
2、事务处理机制
使用@Async异步注解不能和@Transaction事务注解在同一个方法上同时使用,不然事务注解将无效。
要使用事务,需要把事务注解提取到方法里面的子方法上。
Spring开启方法异步执行相关推荐
- Spring Boot 之异步执行方法
给方法加上 @Async 注解 package me.deweixu.aysncdemo.service; public interface AsyncService {void asyncMetho ...
- Spring 接口方法异步调用
对外开放的接口,在被外部调用时,需要校验接收到的数据,校验通过后才能开始进行数据处理,处理完成后向特定地址返回结果. 校验通过后即返回接口调用的响应信息,就涉及到方法的异步调用.在 Spring 框架 ...
- VUE的creat方法异步执行
遇见的问题是发现有个方法时灵时不灵 created() { //Vue的creat方法是异步的this.getUser();this.getApplyInfo(); },methods: {getUs ...
- Spring Boot如何实现异步执行任务
所谓异步任务,其实就是异步执行程序,有些时候遇到一些耗时的的任务,如果一直卡等待,肯定会影响其他程序的执行,所以就让这些程序需要以异步的方式去执行.那么下面就来介绍Spring Boot 如何实现异步 ...
- 【SpringBoot】“@Async” 实现异步执行任务
目录 一.开启异步调用方法 二.创建异步执行类 三.调用异步方法 一.开启异步调用方法 在application启动类中,加上@EnableAsync注解,Spring Boot 会自动扫描异步任务. ...
- Spring中的异步和事务性事件侦听器
内置的事件发布功能从Spring的早期版本开始存在,对于处理同一应用程序上下文中Spring组件之间的基本通信仍然有用. 通常,应用程序可以生成应用程序事件(可以是任意对象)并侦听它们. 整个机制非常 ...
- 【Python】称重系统-异步执行多线程运行threading 模块 Thread 类实现
上次实现了从一个py程序窗口引用另一个py程序,但是发现原来的py窗口关不掉,最后学到一个新的方法-异步执行,Python的多线程编程,使用了threading 模块,可以同时运行两段代码.完美解决之 ...
- spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql...
spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql 转载于:https://www.cnblogs.com/classmethond/p/104 ...
- 【spring】spring异步执行的使用与源码分析
在实际的开发过程中,有些业务逻辑使用异步的方式处理更为合理.比如在某个业务逻辑中,需要把一些数据存入到redis缓存中,这个操作只是一个辅助的功能,成功或者失败对主业务并不会产生根本影响,这个过程可以 ...
最新文章
- Python模块EasyGui专题学习
- 【运营】产品经理必须了解的运营方法,让你的产品有产有销
- window 下生成SSH key
- pringMVC“Ambiguous mapping found. Cannot map 'XXXController' bean method”解决方法
- java生成world文件_HelloWorld.java文件如何创建?
- 实现Runnable 创建多线程的简单实现
- 解析一个C语言俄罗斯方块游戏,包你看了就会
- 后盾网php多少钱_商标转让做公证花多少钱-购店网
- mybatis parametertype 多个参数
- 一些OEM的厂商的漏洞分析
- SPOJ DQUERY D-query(主席树 区间不同数个数)
- python/数据库操作补充—模板—Session
- msfconsole理论
- 252个核心词根——词缀(前缀-后缀)总结大全【最全-一文看懂!!!】
- PPT图形绘制:端午节PPT模板背景
- Excel提示:您的组织策略阻止我们为您完成此操作
- php 的绝对引用,excel单元格引用分为哪三种
- PIE-engine 教程 ——提取黄河流域/山西省1980—2018年流域降水量并对比分析
- 集成学习中boosting、bagging、随机森林算法的介绍
- 发邮件如何隐藏IP地址
热门文章
- 二分+01分数规划+最大化平均值 Dropping tests POJ - 2976
- 哈工大威海计算机组成原理,哈工大威海计算机组成原理复习.pdf
- 数据结构与算法--举例分析法- 栈的压入弹出序列
- word List 30
- autowired用在static_java – @Autowired和static方法
- 经典排序算法(4)——折半插入排序算法详解
- P4288 [SHOI2014]信号增幅仪 最小圆覆盖
- 【CF487E】Tourists【圆方树】【树链剖分】【multiset】
- NC16886 炮兵阵地
- 【COCI 2018/2019 Round #2】Kocka