DBCP数据库连接池使用

DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。

使用

使用方式有4种:

  1. 直接设置数据源参数并建立连接池
  2. 根据properties参数配置文件并建立连接池
  3. XML配置数据源,读取数据源并建立连接池
  4. XML配置连接池,获取连接池

POM引入依赖



    mysql
    mysql-connector-java
    5.1.40



     commons-dbcp
      commons-dbcp
     1.4

方法一:直接设置数据源参数并建立连接池

代码实现

    // 基础连接参数
    private final String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
    private final String USERNAME = "*";
    private final String PASSWORD = "*";
    private final String URL = "jdbc:mysql://*.*.*.*:*/*";
    private final String QUERYSQL = "select 1+1 from dual;";

    // 数据库连接池参数
    private final Integer INITIAL_SIZE=5;
    private final Integer MAX_ACTIVE=5;
    private final Integer MIN_IDLE=2;
    private final Integer MAX_WAIT=1000;
    
    @Test
    public void dbcpPoolTest() throws SQLException {
        /**
         * 直接使用DBCP数据库连接池,与JDBC连接过程类似
         * 1. 配置数据源(用户名、密码、URL、驱动、连接池参数)
         * 2. 获取数据库连接
         * 3. 预编译SQL
         * 4. 执行SQL
         */
        BasicDataSource basicDataSource=new BasicDataSource();

        basicDataSource.setUrl(URL);
        basicDataSource.setUsername(USERNAME);
        basicDataSource.setPassword(PASSWORD);
        basicDataSource.setDriverClassName(DRIVER_CLASS_NAME);

        basicDataSource.setInitialSize(INITIAL_SIZE);
        basicDataSource.setMaxActive(MAX_ACTIVE);
        basicDataSource.setMinIdle(MIN_IDLE);
        basicDataSource.setMaxWait(MAX_WAIT);

        Connection connection=basicDataSource.getConnection();

        Statement statement=connection.createStatement();

        ResultSet resultSet=statement.executeQuery(QUERYSQL);

        while (resultSet.next()){
            System.out.println(resultSet.getInt(1));
        }
    }

方法二:根据properties参数配置文件并建立连接池

Properties配置参数:dbcp.properties

#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://*.*.*.*:*/*
#用户名
username=*
#密码
password=*
#初试连接数
initialSize=5
#最大活跃数
maxTotal=5
#最大idle数
maxIdle=2
#最小idle数
minIdle=1

代码实现

    @Test
    public void dbcpPoolFromPropertiesTest() throws Exception {
        /**
         * 从Properties文件读取参数创建DBCP连接池
         * 1. 读取Properties文件
         * 2. 创建数据源
         * 3. 获取数据库连接
         * 4. 预编译SQL
         * 5. 执行SQL
         */
        InputStream inputStream = this.getClass().getResourceAsStream("dbcp.properties");

        Properties properties = new Properties();

        properties.load(inputStream);

        DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);

        Connection connection = dataSource.getConnection();

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery(QUERYSQL);

        while (resultSet.next()) {
            System.out.println(resultSet.getInt(1));
        }
    }

方法三:XML配置数据源,读取数据源并建立连接池

Properties配置参数:dbcp.properties

#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://*.*.*.*:*/*
#用户名,注意使用user而不是username,username与内置变量名冲突
user=*
#密码
password=*
#初试连接数
initialSize=5
#最大活跃数
maxTotal=5
#最大idle数
maxIdle=2
#最小idle数
minIdle=1

XML配置数据源:dbcp.xml




    
    
        
        
        
        
        
        
        
        
    

代码实现

    @Test
    public void dbcpDatasourceFromXmlTest() throws SQLException {
        /**
         * 使用XML配置数据源
         * 1. 加载数据源
         * 2. 获取数据库连接
         * 3. 预编译SQL
         * 4. 执行SQL
         */
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("dbcp.xml");

        BasicDataSource basicDataSource = applicationContext.getBean("basicDataSource", BasicDataSource.class);

        Connection connection = basicDataSource.getConnection();

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery(QUERYSQL);

        while (resultSet.next()) {
            System.out.println(resultSet.getInt(1));
        }
    }

方法四:XML配置连接池,获取连接池

Properties配置参数:dbcp.properties

#驱动名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://*.*.*.*:*/*
#用户名,注意使用user而不是username,username与内置变量名冲突
user=*
#密码
password=*
#初试连接数
initialSize=5
#最大活跃数
maxTotal=5
#最大idle数
maxIdle=2
#最小idle数
minIdle=1

XML配置数据库连接:dbcp.xml




    
    
        
        
        
        
        
        
        
        
    

    
        
    

代码实现

    @Test
    public void dbcpPoolFromXmlTest() throws SQLException {
        /**
         * 从XML配置中获取数据库连接池
         * 1. 配置数据源及连接池
         * 2. 获取数据库连接
         * 3. 执行SQL
         */
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("dbcp.xml");

        JdbcTemplate jdbcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);

        Integer integer = jdbcTemplate.queryForObject(QUERYSQL, Integer.class);

        System.out.println(integer);
    }

你可能感兴趣的:(后端开发)