这里介绍Spring提供的3种通过Xml实现DataSource(数据源)注入的方式:使用Spring
自带的DriverManagerDataSource、使用DBCP连接池和使用Tomcat提供的JNDI。下面分
别来进行介绍。
1使用Spring自带的DriverManagerDataSource
在第6章的例子中,所有示例的配置文档对于DataSource的注入,使用的都是Spring提供
的DriverManagerDataSource。使用DriverManagerDataSource的在效率上和直接使用Jdbc没
有多大的区别,使用DriverManagerDataSource的配置文档示例代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!—设定dataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.sqlServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://localhost:1433/stdb</value>
<property name="name">
<value>admin</value>
<property name="msg">
</bean>
<!—设定transactionManager -->
<beanid="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</bean>
<bean id="helloDAO" class="com.gc.action.HelloDAO">
<property name="transactionManager">
<ref bean="transactionManager"/>
</beans>
配置文档中id为helloDAO的Bean的示例代码在第6章已经讲解过,这里只是把示例代码
展示出来,以示过程的完整性。HelloDAO.java的示例代码如下:
//******* HelloDAO.java**************
package com.gc.action;
import javax.sql.DataSource;
import org.springframework.jdbc.core.*;
import org.springframework.transaction.*;
import org.springframework.transaction.support.*;
import org.springframework.dao.*;
public class HelloDAO {
private DataSource dataSource;
private PlatformTransactionManager transactionManager;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void setTransactionManager(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
public int create(String msg) {
TransactionTemplatetransactionTemplate=newTransactionTemplate(transactionManager);
Object result = transactionTemplate.execute(
new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
//执行新增的操作,向数据库新增一笔记录
…….
//返回值是resultObject
return resultObject;
});
2使用DBCP连接池
Spring也提供了对DBCP连接池的支持,可以直接在配置文档中配置DBCP数据库连接池,
要在Spring中使用DBCP连接池,需要将spring-framework-2.0-m1/lib/jakarta-commons文件
夹中的commons-collections.jar、commons-dbcp.jar和commons-pool.jar用前面介绍的方法加
入到ClassPath中,使用DBCP连接池的示例代码如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<!—设定Url -->
<!—设定用户名-->
<!—设定密码-->
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
HelloDAO类的代码和上面的一样,不用改变,这里就不在展示了。
3使用Tomcat提供的JNDI
与使用DBCP连接池外相比,使用Spring来进行Web开发,更多的是使用Web容器提供的
数据库连接池功能,这里以使用Tomcat容器为例,来讲解一下在Spring中,使用Tomcat
提供的JNDI应该如何配置。首先要在Tomcat的server.xml中添加一下代码:
<Context path="/myApp" reloadable="true"
docBase="D:/eclipse/workspace/myApp" workDir="D:/eclipse/workspace/myApp/work" >
<Resource name="jdbc/opendb" auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
driverClassName="com.microsoft.jdbc.sqlserver.sqlServerDriver"
url=" jdbc:microsoft:sqlserver://localhost:1433/stdb"
name="admin"
msg="admin"
<!—设定最大连接数-->
maxActive="10000"
<!—连接最大空闲时间-->
maxIdle="10000"
<!—连接最大等待时间-->
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="10"
logAbandoned="true"
/></Context>
然后Spring的配置文档的示例代码如下:
<bean id="dataSource" class="org.springframework.jndi.Jndiobjectfactorybean">
<property name="jndiName">
<value>jdbc/opendb</value>
<ref bean="dataSource"/>
同样,HelloDAO的代码不用改变。
上面介绍的这3种实现DataSource注入的方式,给开发人员的的Jdbc编程带来了极大的方
便,主要是因为Spring对Jdbc进行了良好的封装。