Spring提供的JDBC抽象框架.org.springframework.jdbc.datasource包里有一个用以简化数据源访问的工具类.它支持绑定线程的连接,比如被用于DataSourceTransactionManager.
(1):jdbc.properties 属性配置文件(因为是测试,所以这个文件包括下面的applicationContext.xml都放在classpath下)
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=scott
jdbc.password=tiger
(2): applicationContext.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 加载属性文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- WEB-INFO <value>WEB-INF/jdbc.properties</value>-->
<!-- Classpath --><value>classpath*:jdbc.properties</value>
</list>
</property>
</bean>
<!-- 数据源定义,使用Apache DBCP 连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 数据源定义,使用DriverManagerDataSource 连接 -->
<bean id="dataSource2"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
</beans>
(3) 通过三种方式得到Connection
package cn.com.chenlly.db;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
//不是web应用程序,这两个jdbc.properties,applicationContext.xml文件不是放在WEB-INFO 而是放在SRC classpath下面
public class DbTest {
//配置文件所在的目录
private final static String fileName="D://workspace//spingTest//src//jdbc.properties";
//读取配置文件
public static Properties readDBConfig() throws IOException{
InputStream in = new BufferedInputStream(new FileInputStream(fileName));
Properties p = new Properties();
p.load(in);
in.close();
return p;
}
//Spring 上下文
public static ApplicationContext getContext(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
return context;
}
/*使用Spring的JDBC层,你可以从JNDI得到一个数据源,也可以通过使用Spring发行版提供的实现自己配置它。
后者对于脱离Web容器的单元测试是十分便利的。
我们将在本节中使用DriverManagerDataSource实现*/
public static Connection getConByDMDS(){
Connection con = null;
try {
Properties p = DbTest.readDBConfig();
String driverClassName = p.getProperty("jdbc.driverClassName");
String url = p.getProperty("jdbc.url");
String username = p.getProperty("jdbc.username");
String password = p.getProperty("jdbc.password");
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
con = dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
//通过Spring注入依赖得到连接
public static Connection getConByDMS2() throws SQLException{
ApplicationContext context=DbTest.getContext();
DriverManagerDataSource ds = (DriverManagerDataSource) context.getBean("dataSource2");
Connection con = ds.getConnection();
return con;
}
//DBCP 连接配置
public static Connection getConByDBCP() throws SQLException{
ApplicationContext context=DbTest.getContext();
BasicDataSource ds = (BasicDataSource) context.getBean("dataSource");
Connection con = ds.getConnection();
return con;
}
//主调函数,测试
public static void main(String[] args) {
Connection con = null;
DbTest db= new DbTest();
try{
//(1)DriverManagerDataSource
con = db.getConByDMDS();
System.out.println("DriverManagerDataSource=="+con.toString());
//(2)DriverManagerDataSource by Spring
con = db.getConByDMS2();
System.out.println("DriverManagerDataSource by Spring=="+con.toString());
//(3) DBCP Pool
con = db.getConByDBCP();
System.out.println("DBCP Pool=="+con.toString());
} catch (Exception ex){
ex.printStackTrace();
}
}
}