zoukankan      html  css  js  c++  java
  • 线程池c3p0和dbcp2的配置初始化实例

    一、c3p0

    public class ConnectionManager {
    
        public static ComboPooledDataSource dataSource;
        static {
            try {
                dataSource = new ComboPooledDataSource();
                dataSource.setUser("freeswitch");
                dataSource.setPassword("freeswitch");
                dataSource.setJdbcUrl("jdbc:postgresql://数据库地址:数据库端口/freeswitch");
                dataSource.setDriverClass("org.postgresql.Driver");
                dataSource.setInitialPoolSize(10);
                dataSource.setMinPoolSize(5);
                dataSource.setMaxPoolSize(50);
                dataSource.setMaxStatements(100);
                dataSource.setMaxIdleTime(60);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static Connection getConnection3() {
            Connection conn = null;
            if (null != dataSource) {
                try {
                    conn = dataSource.getConnection();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return conn;
        }
    }

    二、dbcp2

    public class DataBaseHelper {
    
        // 保证一个线程一个Connection,线程安全
        private static final ThreadLocal<Connection> connHolder;
        // 线程池
        private static final BasicDataSource dataSource;
        static {
            connHolder = new ThreadLocal<Connection>();
            dataSource = new BasicDataSource();
            dataSource.setDriverClassName("org.postgresql.Driver");
            dataSource.setUrl("jdbc:postgresql://数据库地址:数据库端口/freeswitch");
            dataSource.setUsername("freeswitch");
            dataSource.setPassword("freeswitch");
            /// 设置空闲和借用的连接的最大总数量,同时可以激活。
            dataSource.setMaxTotal(60);
            // 设置初始大小
            dataSource.setInitialSize(5);
            // 最小空闲连接
            dataSource.setMinIdle(8);
            // 最大空闲连接
            dataSource.setMaxIdle(16);
            // 超时等待时间毫秒
            dataSource.setMaxWaitMillis(2 * 10000);
            // 只会发现当前连接失效,再创建一个连接供当前查询使用
            dataSource.setTestOnBorrow(true);
            // removeAbandonedTimeout :超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
            dataSource.setRemoveAbandonedTimeout(180);
            // removeAbandoned :超过removeAbandonedTimeout时间后,是否进
            // 行没用连接(废弃)的回收(默认为false,调整为true)
            // DATA_SOURCE.setRemoveAbandonedOnMaintenance(removeAbandonedOnMaintenance);
            dataSource.setRemoveAbandonedOnBorrow(true);
            // testWhileIdle
            dataSource.setTestOnReturn(true);
            // testOnReturn
            dataSource.setTestOnReturn(true);
            // setRemoveAbandonedOnMaintenance
            dataSource.setRemoveAbandonedOnMaintenance(true);
            // 记录日志
            dataSource.setLogAbandoned(true);
            // 设置自动提交
            dataSource.setDefaultAutoCommit(true);
    
        }
    
        /**
         * 获取数据库连接
         */
        public static Connection getConnection() {
            Connection conn = connHolder.get();
            if (conn == null) {
                try {
                    conn = dataSource.getConnection();
                    System.out.println("get connection success");
                } catch (SQLException e) {
                    System.out.println("get connection failure:" + e);
                } finally {
                    connHolder.set(conn);
                }
            }
            return conn;
        }
    
        /**
         * 关闭数据库连接
         */
        public static void closeConnection() {
            Connection conn = connHolder.get();
            if (conn != null) {
                try {
                    conn.close();
                    System.out.println("close connection success");
                } catch (SQLException e) {
                    System.out.println("close connection failure:" + e);
                    throw new RuntimeException(e);
                } finally {
                    connHolder.remove();
                }
            }
        }
    
    }
  • 相关阅读:
    PMD安装使用
    FindBugs安装使用
    Checkstyle安装使用
    SourceMonitor的基本使用教程
    论文选题
    github for Test
    Junit的安装与使用
    安装并使用PICT,生成测试用例
    安装并使用CheckStyle/PMD与FindBug && 安装并使用SourceMonitor检测代码复杂度
    github账号 及文章选题
  • 原文地址:https://www.cnblogs.com/yoyotl/p/6593671.html
Copyright © 2011-2022 走看看