注解@Async解决异步调用问题 (2)

分析: 可以发现其是实现了AsyncTaskExecutor, 用独立的线程来执行具体的每个方法操作。在createCallable和createWrapperRunnable中,定义了异常的处理方式和机制。

handle()就是未来我们需要关注的异常处理的地方。
xml配置文件中的内容:

<task:annotation-driven executor="exceptionHandlingTaskExecutor" scheduler="defaultTaskScheduler" /> <bean> <constructor-arg ref="defaultTaskExecutor" /> </bean> <task:executor pool-size="5" /> <task:scheduler pool-size="1" />

也可以使用注解的形式将其配置注册到bean中。

5. @Async调用中的事务处理机制

在@Async标注的方法,同时也使用@Transactional进行标注;在其调用数据库操作之时,将无法产生事务管理的控制,原因就在于其是基于异步处理的操作。

那该如何给这些操作添加事务管理呢?

可以将需要事务管理操作的方法放置到异步方法内部,在内部被调用的方法上添加@Transactional

示例:

方法A, 使用了@Async/@Transactional来标注,但是无法产生事务控制的目的。

方法B, 使用了@Async来标注,B中调用了C、D,C/D分别使用@Transactional做了标注,则可实现事务控制的目的。

6. 参考文章:

[1]、https://www.cnblogs.com/wihainan/p/6516858.html
[2]、

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwfsg.html