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
添加回答
舉報