使用org.apache.commons.dbcp.BasicDataSource配置spring数据库链接,使用数据库链接池技术。java
项目部分引用jar的maven配置mysql
<!-- dbcp --> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
一、新建一个简单的spring项目,用以测试配置dbcp链接池。其目录结构以下:spring
项目目录说明:sql
dbcpTestfileBeans.xml: spring应用上下文。数据库
jdbc.properties:dbcp数据库链接池配置文件。apache
UserDao.java:DAO层bean。bash
DbcpMain:测试类。maven
因为只是本身随便搭建用来测试的,因此文件名命名很不规范,也没目录可言。测试
测试用数据库表及表数据以下:this
二、须要引用的jar包。
<!-- dbcp --> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.6</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
三、项目文件内容。
jdbc.properties:
#加载驱动 jdbc.driverClassName=com.mysql.jdbc.Driver #数据库 jdbc.url=jdbc:mysql://172.21.4.45:3307/cdspdb?useUnicode=true&characterEncoding=utf-8 #数据库用户名 jdbc.username=cdsp #数据库密码 jdbc.password=cdsp #初始化链接数 jdbc.initialSize=3 #最大链接数,非正数为不限制 jdbc.maxActive=1000 #最大空闲链接数,负数为不限制 jdbc.maxIdle=5 #最小空闲链接数,0为不保留空闲链接 jdbc.minIdle=1 #获取链接最大等待时间 ,单位毫秒 jdbc.maxWait=1000 #数据库链接验证语句 jdbc.validationQuery=select 1 #空闲链接检验回收器设置 jdbc.testWhileIdle=true #空闲链接回收器线程运行周期,单位为毫秒,值大小以数据库为准,非正数则不运行空闲链接回收器线程 jdbc.timeBetweenEvictionRunsMillis=300000
dbcpTestfileBeans.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- jdbc配置文件 --> <context:property-placeholder location="com/springtest/dbcp/jdbc.properties" /> <!-- 配置dbcp数据源链接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}" p:initialSize="${jdbc.initialSize}" p:maxActive="${jdbc.maxActive}" p:maxIdle="${jdbc.maxIdle}" p:minIdle="${jdbc.minIdle}" p:maxWait="${jdbc.maxWait}" p:validationQuery="${jdbc.validationQuery}" p:testWhileIdle="${jdbc.testWhileIdle}" p:timeBetweenEvictionRunsMillis="${jdbc.timeBetweenEvictionRunsMillis}"/> <!-- 引入spingjdbc --> <bean id="JdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置da层bean --> <bean id="UserDao" class="com.springtest.dbcp.UserDao"> <property name="jdbcTemplate" ref="JdbcTemplate"></property> </bean> </beans>
UserDao.java:
package com.springtest.dbcp; import java.util.List; import java.util.Map; import org.springframework.jdbc.core.JdbcTemplate; public class UserDao { JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public List<Map<String,Object>> queryByName(String name) { String sql = "select * from thnb_user where user_name='" + name + "' "; List<Map<String,Object>> list = jdbcTemplate.queryForList(sql); return list; } }
DbcpMain:
package com.springtest.dbcp; import java.util.List; import java.util.Map; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class DbcpMain { public static void main(String[] args) { // String contextXmlPath = "com/springtest/dbcp/DbcpTestbeans.xml"; //spring应用上下文 String contextXmlPath2 = "com/springtest/dbcp/dbcpTestfileBeans.xml"; ApplicationContext ctx = new ClassPathXmlApplicationContext(contextXmlPath2); UserDao userDao = (UserDao) ctx.getBean("UserDao"); List<Map<String,Object>> list = userDao.queryByName("thb"); System.out.println(list); } }
四、测试验证
执行DbcpMain,打印以下:
除了打印出查询结果外,上面还有几行是在链接池创建初始化连接时的警告。配置没问题。
五、在项目中配置dbcp数据库链接池。
在项目中配置的话, 则能够将jdbc.properties直接拿去放在项目目录下,引用到spring应用上下文中,再配置须要的参数。将测试项目dbcpTestfileBeans.xml中的dataSource对应配置到项目的springcontext中。