Spring事务管理器和多线程

我正在使用Callable接口在serviceImpl中编写多线程程序。我正在使用spring事务管理器。在DB中执行更新操作时,它会成功执行。但是更新后的数据不会反映在DB中。但是,当我运行不带多线程的程序时,它将在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事务管理器是否支持多线程(我的意思是仅通过声明批注或XML)为什么我的情况下更新的数据未反映在DB中? 最好的替代方法是什么?

回答:

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

以上是 Spring事务管理器和多线程 的全部内容, 来源链接: utcz.com/qa/424453.html

回到顶部