加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:22:57 所属栏目:百科 来源:网络整理
导读:这里介绍 Spring 提供的 3 种通过 Xml 实现 DataSource (数据源)注入的方式:使用 Spring 自带的 DriverManagerDataSource 、使用 DBCP 连接池和使用 Tomcat 提供的 JNDI 。下面分 别来进行介绍。 1 使用 Spring 自带的 DriverManagerDataSource 在第 6 章

这里介绍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>

配置文档中idhelloDAOBean的示例代码在第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.jarcommons-dbcp.jarcommons-pool.jar用前面介绍的方法加

入到ClassPath中,使用DBCP连接池的示例代码如下:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

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

<!—设定Url -->

<!—设定用户名-->

<!—设定密码-->

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

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

3使用Tomcat提供的JNDI

与使用DBCP连接池外相比,使用Spring来进行Web开发,更多的是使用Web容器提供的

数据库连接池功能,这里以使用Tomcat容器为例,来讲解一下在Spring中,使用Tomcat

提供的JNDI应该如何配置。首先要在Tomcatserver.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编程带来了极大的方

便,主要是因为SpringJdbc进行了良好的封装。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读