diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java index 53bad50aceca1..5c2331ebba152 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/BackendTransactionManager.java @@ -60,9 +60,14 @@ public BackendTransactionManager(final ProxyDatabaseConnectionManager databaseCo connection = databaseConnectionManager; localTransactionManager = new LocalTransactionManager(databaseConnectionManager); TransactionRule transactionRule = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class); + TransactionConnectionContext transactionContext = getTransactionContext(); transactionType = transactionRule.getDefaultType(); ShardingSphereTransactionManagerEngine engine = transactionRule.getResource(); - distributedTransactionManager = null == engine ? null : engine.getTransactionManager(transactionType); + if (transactionContext.getTransactionManager().isPresent()) { + distributedTransactionManager = (ShardingSphereDistributedTransactionManager) transactionContext.getTransactionManager().get(); + } else { + distributedTransactionManager = null == engine ? null : engine.getTransactionManager(transactionType); + } transactionHooks = OrderedSPILoader.getServices(TransactionHook.class, ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()); }