2 回答
TA贡献1810条经验 获得超4个赞
正如 Arjun 建议的那样,您可以将 saveAll 上的事务与适当的事务管理器一起使用。
或者您可以像这样定义一个分布式事务管理器(假设您有两个事务管理器的 bean):
@Configuration
public class ChainedTransactionManagerConfig
{
/**
* combined TM
*/
public static final String TRANSACTION_MANAGER = "chainedTransactionManager";
/**
*
* @param oneTransactionManager oneTransactionManager
* @param twoTransactionManager twoTransactionManager
* @return combined TM
*/
@Bean(name = TRANSACTION_MANAGER)
public ChainedTransactionManager transactionManager(
// Bean name of the first one
@Qualifier("firstTransactionManager") PlatformTransactionManager oneTransactionManager,
// Bean name of the second one
@Qualifier("secondTransactionManager") PlatformTransactionManager twoTransactionManager)
{
return new ChainedTransactionManager(oneTransactionManager, twoTransactionManager);
}
}
然后你可以像这样在你的方法上使用它:
import org.springframework.transaction.annotation.Transactional;
@Transactional(transactionManager = ChainedTransactionManagerConfig.TRANSACTION_MANAGER)
也请使用 Spring 的事务性注解 (org.springframework.transaction.annotation)
TA贡献1796条经验 获得超4个赞
您有 2 个数据源,这意味着您将有 2 个 TransactionManager bean
现在,当您使用 @Transactional 而不指定名称时,它将与默认 TransactionManager 一起使用
这意味着,只有在 processUpdate() 完成后才会提交默认事务
建议
我不知道您是否有分布式事务管理的要求,如果没有,那么只需在 saveAll() 上使用具有适当 TransactionManager 名称的独立 @Transactional
添加回答
举报