From be69901c0ad8ffacaf5b948ccca11b350a9d11c5 Mon Sep 17 00:00:00 2001
From: liurunyu <lry9898@163.com>
Date: 星期三, 20 八月 2025 10:44:20 +0800
Subject: [PATCH] 修改bug
---
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java | 86 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java
new file mode 100644
index 0000000..411999a
--- /dev/null
+++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/multiDataSource/MultiDataSourceTransaction.java
@@ -0,0 +1,86 @@
+package com.dy.common.multiDataSource;
+
+import org.apache.ibatis.transaction.Transaction;
+import org.springframework.jdbc.CannotGetJdbcConnectionException;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ * 澶氭暟鎹簮鐨勪簨鍔$被锛屼簨鍔″璞$敱浜嬪姟宸ュ巶鍒涘缓锛屽畬鎴愭暟鎹簱浜嬪姟鎿嶄綔銆�
+ * 浜嬪姟瀵硅薄鍖呰9鐫�锛�
+ * 鏁版嵁搴撹繛鎺ャ�佷簨鍔℃彁浜ゃ�佷簨鍔″洖婊氱瓑瀵硅薄鍙婃搷浣�
+ * 鍦ㄤ簨鍔″璞′腑鍏蜂綋鍐冲畾閲囩敤鐨勫叿浣撴暟鎹簮
+ */
+public class MultiDataSourceTransaction implements Transaction {
+
+ private final DataSource multidataSource;
+
+ private final ConcurrentMap<String, Connection> curConMap;
+
+ private boolean autoCommit;
+
+
+ public MultiDataSourceTransaction(DataSource dataSource, boolean autoCommit) {
+ //dataSource鏄疍ynamicDataSource绫荤殑瀹炰緥
+ this.multidataSource = dataSource;
+ this.autoCommit = autoCommit;
+ curConMap = new ConcurrentHashMap<>();
+ }
+
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ String nowDsName = DataSourceContext.get();
+ if (nowDsName == null || "".equals(nowDsName)) {//StringUtils.isEmpty(databaseIdentification)
+ //databaseIdentification = DataSourceName.USERDATASOURCE.getName();
+ throw new CannotGetJdbcConnectionException("鏈緱鍒版暟鎹簮鍚嶇О");
+ //nowDsName = "ym" ;
+ }
+ //鑾峰彇鏁版嵁婧愯繛鎺�
+ if (!this.curConMap.containsKey(nowDsName)) {
+ try {
+ Connection conn = this.multidataSource.getConnection();
+ this.autoCommit = false;
+ conn.setAutoCommit(false);
+ this.curConMap.put(nowDsName, conn);
+ } catch (SQLException ex) {
+ throw new CannotGetJdbcConnectionException("鏈緱鍒版暟鎹簮JDBC杩炴帴", ex);
+ }
+ }
+ return this.curConMap.get(nowDsName);
+ }
+
+
+ @Override
+ public void commit() throws SQLException {
+ for (Connection connection : curConMap.values()) {
+ if (!autoCommit) {
+ connection.commit();
+ }
+ }
+ }
+
+ @Override
+ public void rollback() throws SQLException {
+ for (Connection connection : curConMap.values()) {
+ connection.rollback();
+ }
+ }
+
+ @Override
+ public void close() throws SQLException {
+ for (Connection connection : curConMap.values()) {
+ DataSourceUtils.releaseConnection(connection, this.multidataSource);
+ }
+ }
+
+ @Override
+ public Integer getTimeout() throws SQLException {
+ return null;
+ }
+}
--
Gitblit v1.8.0