使用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中。