通过 XML 实现 DataSource(数据源)注入
2008-07-30 19:35
363 查看
这里介绍 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>
<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 类的代码和上面的一样,不用改变,这里就不在展示了。
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
的配置文档的示例代码如下:
<?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
进行了良好的封装。
相关文章推荐
- 通过 XML 实现 DataSource(数据源)注入
- java 通过继承类AbstractRoutingDataSource 而实现的 多数据源切换 的 缺陷(二)
- 继承AbstractRoutingDataSource再通过AOP实现动态数据源切换(转)
- 【原】继承AbstractRoutingDataSource再通过AOP实现动态数据源切换
- 继承AbstractRoutingDataSource再通过AOP实现动态数据源切换
- 控件(三)——TreeView控件以XmlDataSource控件为数据源实现简单的绑定
- 控件(三)——TreeView控件以XmlDataSource控件为数据源实现简单的绑定
- 系出名门Android(10) - HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理
- Spring(AbstractRoutingDataSource)实现动态数据源切换--转载
- 系出名门Android(10) - HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理
- spring AbstractRoutingDataSource实现动态数据源切换
- Android通过在布局文件中设置include实现xml布局的复用
- 应用通过JNDI访问WAS数据源时Spring中datasource初始化失败问题的解决办法
- 通过泛型参数实现接口注入
- spring基于task标签和通过xml配置实现任务的区别
- 通过VS中的数据源选择对话框简单实现数据库连接配置
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Aop和AbstractRoutingDataSource实现多数据源
- java防止脚本注入,通过拦截器实现
- 通过Spring Boot配置动态数据源访问多个数据库的实现代码