当前位置: 首页 > 工具软件 > IE-MANAGER > 使用案例 >

使用连接池的ConnectionManager连接管理类

通建安
2023-12-01

这是一个连接数据库的管理程序,使用DataSource连接池管理连接的总数量,同时使用了ThreadLocal(连接线程池,一个线程的连接永远使用的是该线程的链接对象)。具体代码如下:

public class ConnectionManager {
    private static ThreadLocal<Connection> remoteConnection = new ThreadLocal<>();
    private static DataSource dataSource = new BasicDataSource();

    static {

        // 配置文件:resources/database.properties
        ResourceManager resourceManager = ResourceManager.load("database");
        String driver = resourceManager.getString("jdbc.driver");
        String url = resourceManager.getString("jdbc.url");
        String user = resourceManager.getString("jdbc.user");
        String password = AesUtil.decrypt(resourceManager.getString("jdbc.password"));

        // 下面取代了Class.forName()(或DbUtils.loadDriver)和DriverManager.getConnection()。
        BasicDataSource source = (BasicDataSource) dataSource;
        source.setDriverClassName(driver);
        source.setUrl(url);
        source.setUsername(user);
        source.setPassword(password);
    }

    /**
     * 取得连接对象
     * @return 连接对象
     */
    public static Connection getConnection() throws SQLException {
        Connection conn = remoteConnection.get();
        if (conn == null) {
            conn = dataSource.getConnection();
            remoteConnection.set(conn);
        }
        return conn;
    }

    /**
     * 关闭连接
     */
    public static void close() throws SQLException {
        getConnection().close();
        remoteConnection.remove(); // 移除掉,或者set(null)
    }

    /**
     * 提交事务
     */
    public static void commit() throws SQLException {
        getConnection().commit();
    }

    /**
     * 回滚事务
     */
    public static void rollback() throws SQLException {
        getConnection().rollback();
    }

    /**
     * 设为自动调焦
     * @param flag true是自动提交(默认);false是事务(手动)提交
     */
    public static void setTransaction(boolean flag) throws SQLException {
        getConnection().setAutoCommit(flag);
    }

    /**
     * 查看当前是否是事务提交
     * @return true是事务(手动)提交;false是自动提交
     */
    public static boolean getTransaction() throws SQLException {
        return !getConnection().getAutoCommit();
    }
}

更多详细内容请参见:https://github.com/duoyle/ConnectionManager

 类似资料: