您的位置:首页 > 编程语言 > Java开发

通过 XML 实现 DataSource(数据源)注入

2008-07-30 19:35 363 查看
 

这里介绍 Spring
提供的 3
种通过 Xml
实现 DataSource(数据源)注入的方式:使用 Spring

自带的 DriverManagerDataSource、使用 DBCP
连接池和使用 Tomcat
提供的 JNDI。下面分

别来进行介绍。

 

 


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

       
<property name="name">

                       
<value>admin</value>  

       
</property>

       
<property name="msg">

                       
<value>admin</value>  

       
</property>

</bean>

<!—设定
transactionManager -->

   
<bean id="transactionManager"

   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

 

     
<property name="dataSource">

           
<ref bean="dataSource"/>

       
</property>    

   
</bean>                                                                                                                                                   

   
<bean id="helloDAO" class="com.gc.action.HelloDAO">

       
<property name="dataSource">

           
<ref bean="dataSource"/>

       
</property>

       
<property name="transactionManager">

           
<ref bean="transactionManager"/>

       
</property>

   
</bean>

</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) { 

       
TransactionTemplate transactionTemplate
= new 
TransactionTemplate(transactionManager); 

Object result = transactionTemplate.execute( 

           
new TransactionCallback() { 

                       
public Object doInTransaction(TransactionStatus status) { 

                       
//  执行新增的操作,向数据库新增一笔记录

  
…….

                       
//  返回值是
resultObject

                       
return resultObject;  

               
});

       
}  

}

[align=justify][/align]

 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
连接池的示例代码如下:

 

<?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.apache.commons.dbcp.BasicDataSource"

destroy-method="close">  

             
<!—使用
sqlserver
数据库 --> 

  
<property name="driverClassName">

           
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> 

       
</property>

     
<!—设定
Url -->

       
<property name="url">

           
<value>jdbc:microsoft:sqlserver://localhost:1433/stdb</value> 

       
</property>

               
<!—设定用户名-->

       
<property name="name">

                       
<value>admin</value>  

       
</property>

     
<!—设定密码-->

       
<property name="msg">

                       
<value>admin</value>  

       
</property>

</bean>

<!—设定
transactionManager -->

   
<bean id="transactionManager"

                                      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       
<property name="dataSource">

           
<ref bean="dataSource"/>

       
</property>    

   
</bean>

                                                                                                                                                  

   
<bean id="helloDAO" class="com.gc.action.HelloDAO">

       
<property name="dataSource">

           
<ref bean="dataSource"/>

       
</property>

       
<property name="transactionManager">

           
<ref bean="transactionManager"/>

       
</property>

   
</bean>

</beans>

 

HelloDAO 类的代码和上面的一样,不用改变,这里就不在展示了。
 


使用
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
的配置文档的示例代码如下:

 

<?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.jndi.JndiObjectFactoryBean">

       
<property name="jndiName">

           
<value>jdbc/opendb</value>

       
</property>

   
</bean>  

<!—设定
transactionManager -->

   
<bean id="transactionManager"

                                       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

       
<property name="dataSource">

           
<ref bean="dataSource"/>

       
</property>    

   
</bean>

                                                                                                                                                 

   
<bean id="helloDAO" class="com.gc.action.HelloDAO">

      
 <property name="dataSource">

           
<ref bean="dataSource"/>

[align=justify][/align]

       
</property>

       
<property name="transactionManager">

           
<ref bean="transactionManager"/>

       
</property>

   
</bean>

</beans>

 

同样,HelloDAO
的代码不用改变。

上面介绍的这 3
种实现 DataSource
注入的方式,给开发人员的的 Jdbc
编程带来了极大的方

便,主要是因为 Spring
对 Jdbc
进行了良好的封装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息