1. AbstractRoutingDataSource 想根据当前的事务状态来 routing
2. 在从库上禁用更新操作
3. 每个请求 打在一个数据源上
1. 在进行 data source routing 时,TransactionSynchronizationManager.isActualTransactionActive 总是返回 false ;按照代码的语义实际上是在事务之中的; 请问有什么其他的 API 可以使用么?
2. 在 data source routing 中想向 TransactionSynchronizationManager 注册 TransactionSynchronization 用于资源清理,但是返回 synchronization is not active
Christophe Fondacci 这个回答。。似乎没有解决
JdbcTransactionObjectSupport transaction1 = (JdbcTransactionObjectSupport) transaction;
if (!transaction1.hasConnectionHolder() || transaction1.getConnectionHolder().isSynchronizedWithTransaction()){
logger.info("it seems it is in transaction ");
//do thread local bind in transaction status
}
@Override
protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) {
super.prepareSynchronization(status, definition);
if (MasterSlavesDataSourceSynchronization.isInTransaction()){
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCompletion(int status) {
// do your thread local resource clean
}
});
}
}
1
coderwl 2021-04-06 19:04:35 +08:00
直接用现成的吧,我司用的 sharding-jdbc , 写 /读操作自动路由到主 /从库,支持单库事务,可以看下
|