From d1e380d5bc8d6cda7dc26778dd638b3367483ae7 Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期五, 11 四月 2025 17:27:30 +0800 Subject: [PATCH] 小程序6种开关阀操作失败时重发一次 --- 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