package org.dc.jdbc.core; import java.sql.Connection; import java.util.Map; import javax.sql.DataSource; /** * 连接管理 * * @author dc * @time 2015-8-17 */ public class ConnectionManager { // 设置事务 public static void setTransaction(boolean startTransaction) { SqlContext.getContext().setTransaction(startTransaction); } // 设置只读 public static void setReadOnly(boolean readOnly) { SqlContext.getContext().setReadOnly(readOnly); } public static Connection getConnection(DataSource dataSource) throws Exception { SqlContext sqlContext = SqlContext.getContext(); Connection conn = sqlContext.getDataSourceMap().get(dataSource); if (conn == null || conn.isClosed()) { conn = dataSource.getConnection(); sqlContext.getDataSourceMap().put(dataSource, conn); sqlContext.setCurrentDataSource(dataSource); } // 设置事务 conn.setAutoCommit(!sqlContext.getTransaction()); conn.setReadOnly(sqlContext.getReadOnly()); return conn; } public static void closeConnectionAll() throws Throwable { Map<DataSource, Connection> connMap = SqlContext.getContext().getDataSourceMap(); Throwable ee = null; for (Connection conn : connMap.values()) { try { if (conn != null && !conn.isClosed()) { conn.close(); conn = null; } } catch (Throwable e) { if(ee == null) { ee = e; } } } //销毁 SqlContext.getContext().destroySqlContext(); if(ee!=null) { throw ee; } } /** * 回滚所有数据源的操作,正常的数据库能够回滚,回滚异常也不用管,继续回滚下一个数据库,直到回滚操作结束 * @throws Exception */ public static void rollbackAll() throws Throwable { Map<DataSource, Connection> connMap = SqlContext.getContext().getDataSourceMap(); for (Connection conn : connMap.values()) { if (conn != null && !conn.isClosed() && conn.getAutoCommit() == false) { conn.rollback(); } } } /** * 保证正常的数据的数据能提交成功,否则直接回滚 * * @throws Exception */ public static void commitAll() throws Throwable { Map<DataSource, Connection> connMap = SqlContext.getContext().getDataSourceMap(); for (Connection conn : connMap.values()) { try { if (conn != null && !conn.isClosed() && conn.getAutoCommit() == false) { conn.commit(); } } catch (Throwable e) { throw e; } } } }