gpt4 book ai didi

java - Spring 事务管理器和多线程

转载 作者:搜寻专家 更新时间:2023-11-01 03:59:10 25 4
gpt4 key购买 nike

我正在使用 Callable 接口(interface)在 serviceImpl 中编写多线程程序。我正在使用 spring 事务管理器。当在 DB 中执行更新操作时,它执行成功。但是更新的数据没有反射(reflect)在 DB 中。但是当我在没有多线程的情况下运行程序,它在数据库中更新

这是我的配置

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" />
<tx:method name="find*" propagation="NOT_SUPPORTED" />
<tx:method name="get*" propagation="NOT_SUPPORTED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceOperation" expression="execution(* *..*ServiceImpl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

我可以转向另一种事务管理器方法。我只是想确认这种方法是否支持多线程。所以我的问题是spring transaction manager 是否支持多线程(我的意思是只通过声明注解或 XML )为什么更新后的数据没有反射(reflect)在我的数据库中?最好的替代方法是什么?

最佳答案

Spring 使用的事务上下文存储在线程局部变量中。因此,如果您启动一个新线程,或使用可调用对象在另一个线程中执行代码,则此代码将不会成为 Spring 事务方面启动的事务的一部分。这就是为什么您的数据没有出现在数据库中的原因。

关于java - Spring 事务管理器和多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com