动态切换数据源@Async线程安全问题
多线程的异步调用未成功大致分为以下三种问题:
1、没有在@SpringBootApplication启动类当中添加注解@EnableAsync注解。
2、异步方法使用注解@Async的返回值只能为void或者Future。没有走Spring的代理类。因为@Transactional和@Async注解的实现都是基于Spring的AOP,而AOP的实现是基于动态代理模式实现的。
springboot实现aop3、那么注解失效的原因就很明显了,有可能因为调用方法的是对象本身而不是代理对象,因为没有经过Spring容器。
@Async线程安全问题详解:
是否是一个新的事物:booleanisNewTransaction();
判断是否有回滚点:booleanhasSavepoint();
将一个事务标识为不可提交的。在调用完setRollbackOnly()后只能被回滚
在大多数情况下,事务管理器会检测到这一点,在它发现事务要提交时会立刻结束事务。
调用完setRollbackOnly()后,数据库可以继续执行select,但不允许执行update语句,因为事务只可以进行读取操作,任何在这里插入代码片修改都不会被提交。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论