小编atr*_*ain的帖子

Spring @Async和AbstractRoutingDataSource

我一直在使用AbstractRoutingDataSource取得了巨大成功,但遇到了一个我无法解决的问题:当我开始使用异步方法时@Async,它会丢失本地线程的上下文,我无法弄清楚要设置的位置数据库上下文切换.通常我会在一个方面或在一个方面HandlerInterceptor,但@Async不会通过任何这些通常的路线.是否有拦截器或类似的东西,我可以配置为在异步调用的开始和结束时触发,以便我可以设置数据库上下文?

在Spring留言板上找到了类似的问题.但是没有答案:http://forum.springsource.org/showthread.php?83792-Async-annotated-method-hanging-on-session-scoped-bean

编辑:我已经调试了执行流程,并且AbstractRoutingData源实际上在异步线程中调用的,但是在调用方面之前调用它,所以在值设置之前DataSource已经在Hibernate会话中设置了.查看源代码,后面的,因为拦截器返回其值,因此它在其他任何东西之前被触发.ThreadLocalAsyncExecutionInterceptor@AsyncOrderHIGHEST_PRECEDENCE

在此输入图像描述

spring multithreading asynchronous hibernate jdbc

6
推荐指数
1
解决办法
2527
查看次数

Spring @Async和Synchronized

我有一个基于Spring的异步方法(带注释@Async),我想在错误事件发生一定次数的情况下暂停.由于可能有多个线程在做同样的事情,我尝试了一个static AtomicInteger(MY_COUNT),以便所有线程都可以知道计数,并利用内置的并发性AtomicInteger提供.

在我的单元测试中(SpringJUnit4ClassRunner在Eclipse中运行),一切都很好,直到线程命中MY_COUNT.incrementAndGet().然后线程就消失了.没有例外,没有.异步工作线程就消失了.我尝试取出AtomicInteger并只使用synchronized方法,但同样的事情发生了.

问题:@Async同步之间是否存在某种引擎间的交互?是不是可以将两者结合起来?


编辑:更多信息:它似乎与同步范围有关(如果这是正确的术语).一旦我static从计数器变量中删除了指定,它仍然被轰炸; 但是当我将其更改为a Integer并将增量代码移动到其自己的synchronized方法时,代码继续进行.我没有调试底层的Spring代码; 是否有任何Spring专家可能能够阐明这种行为?

java concurrency junit spring asynchronous

6
推荐指数
1
解决办法
2793
查看次数