美文网首页
JAVA使用DBCP2(数据库连接池)

JAVA使用DBCP2(数据库连接池)

作者: 莫小归 | 来源:发表于2018-08-02 10:37 被阅读0次

    参考:https://www.cnblogs.com/xdp-gacl/p/4002804.html
    https://blog.csdn.net/zxh707wk/article/details/54237332
    https://blog.csdn.net/icanlove/article/details/44097839

    一.准备工作

    需要下载commons-dbcp2-2.4.0.jar 和 commons-pool2-2.5.0.jar

    二.DBCP2数据库连接池工具类

    不使用配置文件,直接通过代码设置数据源参数

    import org.apache.commons.dbcp2.BasicDataSource;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class SqlPoolUtil {
    
        private static BasicDataSource dataSource = new BasicDataSource();
        //配置数据源
        static
        {
            DataSourceConfig();
        }
    
        //以代码形式,设置数据源各属性值
        private static void DataSourceConfig(){
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUsername("root");
            dataSource.setPassword("******");
            dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false");
            dataSource.setInitialSize(20);
            dataSource.setMaxTotal(80);
            dataSource.setMaxIdle(40);
            dataSource.setMinIdle(20);
            dataSource.setMaxWaitMillis(6000);
        }
    
        //获得连接对象
        public static Connection getConn(){
            Connection conn = null;
            try{
                conn = dataSource.getConnection();
            }catch (SQLException e){
                e.printStackTrace();
            }
            return conn;
        }
    
        public static void release(Connection conn, Statement st, ResultSet rs){
            if (rs!=null){
                try {
                    //关闭存储查询结果的ResultSet对象
                    rs.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
                rs = null;
            }
            if (st!=null){
                try {
                    st.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                try {
                    //将Connection连接对象还给数据库连接池
                    conn.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
    
    

    三.DBCP使用配置文件设置数据源参数

    需要下载Commons-dbcp.jar和Commons-pool.jar
    1.配置文件dbcpconfig.properties

    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/Dandelion?useUnicode=true&characterEncoding=utf-8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true
    username=root
    password=******
    initialSize=10
    maxActive=50
    maxIdle=20
    minIdle=5
    maxWait=30000
    connectionProperties=useUnicode=true;characterEncoding=UTF8
    defaultAutoCommit=true
    defaultTransactionIsolation=READ_UNCOMMITTED
    

    2.读取数据源配置的JAVA代码

    import org.apache.commons.dbcp.BasicDataSource;
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    import javax.sql.DataSource;
    import java.io.InputStream;
    import java.sql.*;
    import java.util.Properties;
    
    /**
     * @ClassName:JdbcUtil
     * @Description:数据库连接工具类
     */
    public class JdbcUtil {
        //数据库连接池需实现javax.sql.DataSource接口,DBCP连接池是javax.sql.DataSource接口的具体实现
        private static DataSource ds = new BasicDataSource();
        //使用静态代码块创建数据库连接池
        static{
            try{
                //加载dbcpconfig.properties配置文件
                InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("/src/dbcpconfig.properties");
                Properties prop = new Properties();
                prop.load(in);
                log.info(prop.getProperty("password"));
                log.info("开始创建数据源");
                //创建数据源
                ds = BasicDataSourceFactory.createDataSource(prop);
            }catch (Exception e){
                throw new ExceptionInInitializerError(e);
            }
        }
    
        /**
         * @Method:getConnection
         * @Description:从数据源中获取数据库连接
         * @return
         * @throws SQLException
         */
        public static Connection getConnection() throws SQLException{
            //从数据源中获取数据库连接
            return ds.getConnection();
        }
    
        /**
         * @Method:release
         * @Description:释放资源(数据库连接对象conn,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象)
         * @param conn
         * @param st
         * @param rs
         */
        public static void release(Connection conn, Statement st, ResultSet rs){
            if (rs!=null){
                try {
                    //关闭存储查询结果的ResultSet对象
                    rs.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
                rs = null;
            }
            if (st!=null){
                try {
                    st.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                try {
                    //将Connection连接对象还给数据库连接池
                    conn.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
    

    四.关于DBCP读取properties文件路径的说明

    JAVA的Class.getClassLoader.getResourceAsStream(String path)中的path有带“/"和不带“/"两种写法

    第一种:前面有 “ / ”
    “ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject
    me.class.getResourceAsStream("/com/x/file/myfile.xml");

    第二种:前面没有 “ / ”
    代表当前类的目录
    me.class.getResourceAsStream("myfile.xml");
    me.class.getResourceAsStream("file/myfile.xml");

    万丈红尘三杯酒,千秋大业一壶茶

    相关文章

      网友评论

          本文标题:JAVA使用DBCP2(数据库连接池)

          本文链接:https://www.haomeiwen.com/subject/iocjvftx.html