数据库的使用,我想几乎任何的Java EE系统都会把持久化数据保存到数据中,但是,不管通过何种持久化技术以及何种数据库,首先第一步,我们都必须拥有数据库的连接,数据库的连接,我们有使用JDBC连接的,而且手动的在程序中连接并关闭释放数据库连接资源,还有呢,就是通过Web应用报务器提供数据源,即JNDI(Java Naming and Directory Interface),在spring中,配置数据源通过有三种方式:JNDI数据源、数据源连接池、JDBC驱动的数据源。现一一介绍:
一、JNDI数据源
1、tomcat JNDI数据源配置
在介绍Spring获取JNDI数据源的方法之前,先来看看tomcat里如何配置JNDI数据源的。具体实现的步骤,我们以tomcat下的文档说明,比如,我的tomcat安装在G:/apache-tomcat-6.0.26,以下统称为<TOMCAT_HOME>。那么文档说明则在<TOMCAT_HOME>/webapps/docs/jndi-datasource-examples-howto.html这个文件里,我想大家都是聪明人,这几个破单词我想大家还是应该了解认识的,不知道?金山词霸(我就这么做的,呵呵)。跟着文档一步一步的走,还是相当的简单的,在此我也就不浪费“笔墨”了,只是把其中几个注意点说明一下:
1)JNDI数据源的配置在<TOMCAT_HOME>/conf/context.xml文件下,现粘贴配置代码如下:
<Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="root" password="root"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest"/>
</Context>
path与docBase必须与我们自己web项目工程的URL名称一致;必须加数据库连接jar包到<TOMCAT_HOME>/lib目录下。
2)在我们自己web工程下的web.xml文件中,加上JNDI资源的引用配置:
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
其中,res-ref-name的配置名称必须与1)点中Resource的name属性名字一致。
3)除了文档中说明的使用JSTL标签连接资源外,还可以使用如下方式获取数据库连接:
Context initCtx = new InitialContext();
DataSource source = (DataSource)initCtx.lookup("java:comp/env/jdbc/TestDB");
Connection con = source.getConnection();
加在JNDI数据源名称之前的java:comp/env/是环境命名上下文(environment naming context(ENC))
具体的实现,见附件DBTest.rar。
2、Spring JNDI数据源配置
使用Spring配置JNDI数据源就有些简单了,实际上它就是替代了说明的第3)点,Spring有专门提供引用JNDI资源的org.springframework.jndi.JndiObjectFactoryBean类,具体的配置如下:
<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/TestDB"/>
<property name="resourceRef" value="true"/>
</bean>
属性jndiName用于指定JNDI里数据源的名称。如果只设置了jndiName属性,数据源就是由它直接指定的。但是呢,上面,我们是在tomcat服务器里配置的数据源,所以呢,把resourceRef属性设置为true,jndiName会被添加java:comp/env/这个前缀。
Spring2.X为了获取Java EE资源,提供了一个jee命名空间,通过它我们可以大大简化Java EE资源的引用,要运用jee命名空间,首先在spring的配置文件里引入如下加粗的三行:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
然后配置如下:
<jee:jndi-lookup id="datasource" jndi-name="jdbc/TestDB" resource-ref="true">
</jee:jndi-lookup>
它有一个resource-ref属性,与上面的resourceRef意义相同。
至此,JNDI的数据源配置方式介绍完了,下面来介绍Spring配置借助于第三方的数据源连接池。
二、数据源连接池
Spring依赖的第三方包中包含了两个数据源的实现类包,一个是Apache下的开源项目DBCP,别一个则是同样开放源码并且可用配置属性异常丰富的C3P0。
1、DBCP数据源
要使用DBCP作为Spring的数据源实现,需要在类路径下加入如下两个jar包:commons-dbcp.jar和commons-pool.jar,这两个包都已位于<SPRING_HOME>\lib\jakarta-commons包下。使用DBCP的MySql数据源配置如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/TestDB"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<!-- 其它配置省略,可根据自己的需要配置-->
</bean>
BasicDataSource提供了close()方法关闭数据源,所以呢,必须设置destroy-method="close",以便Spring容器关闭时,数据源能够同时关闭。
除了以上所提供的数据源连接的必需属性外,DBCP还有其它一些很有用的属性,比如defaultAutoCommit、defaultReadOnly、maxActive、maxIdle等等。
2、C3P0数据源
C3P0所依赖的jar包,位于<SPRING_HOME>\lib\c3p0包下,具体配置如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/TestDB"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
<!-- 其它配置省略,可根据自己的需要配置-->
</bean>
ComboPooledDataSource同样提供了关闭数据源的close()方法,但它比DBCP拥有更多的配置属性,在此不多做介绍,对它不是很熟。
三、JDBC驱动的数据源
DriverManagerDataSource、SingleConnectionDataSource,Spring提供的两种简单的数据源实现。数据源的配置与DBCP、C3P0大同小异,故在此一略而过。
实现上,这两种方式用得都不是很多,因为他们有着很明显的缺陷,对数据源都没有进行池化。
好了,打得我累死了,以便以后继续学习使用,收工!
分享到:
相关推荐
spring数据源配置
阐述spring的数据源配置
Spring多数据源配置,支持mysql、oracle等多个数据源同时存在的情况
spring 动态多数据源配置代码,本项目是maven项目,里面有完成的配资好的spring多数据源代码和配置文件。
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
spring配置JNDI数据源
基于注解的Spring多数据源配置和使用 前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备。由于之前做过的项目都是单数据源的,没有遇到这种场景,...
spring实现多数据源,可以在配置文件中添加
Spring Boot使用spring-data-jpa配置Mysql多数据源,可用版本
spring 配置多数据源
Spring多数据源配置_分布式数据 Tomcat服务器下的多数据源配置详情 一、环境及框架 Tomcat+spring+hibernate+jotm,还有就是struts、Oracle等 二、需求说明 系统里有2套不同网域的oracle数据库,之间的数据需要进行...
一个springboot的多数据配置,从mapper到controller完整的一个业务流程
通过简单的demo实现SpingBoot多数据源配置并动态切换多数据源
1. 基于Aspectj实现动态数据源...6. 实现事务内切换数据源(支持原生Spring声明式事务哟,仅此一家),并支持多数据源事务回滚(有了它除了跨服务的事务你需要考虑分布式事务,其他都不需要,极大的减少了系统的复杂程度)
连接MYSQL数据库,SPRING配置文件示例。
SSM(Spring+SpringMVC+MyBatis)多数据源配置框架,精简版
本文详细介绍了在Spring中 数据源的灵活配置巧应用
spring,myibatis,配置文件,数据源,web工程