spring配置数据源的几种方法

1.使用JNDI

Spring应用程序通常部署在Java EE应用服务器中,如WebSphere,JBoss,Tomcat这样的Web容器。这些服务器允许配置通过jndi获取数据源。
好处:
(1)数据源完全可以在应用程序之外进行管理,应用程序只需在访问数据库的时候查找数据源即可.
(2)数据源以池的方式进行组织,具备更好的性能(虽然其它方式也可以)
(3)支持系统管理员进行热切换.
配置方法:
(1)在spring配置文件中如下设置:

<jee:jndi-lookup id="datasource" jndi-name="/jdbc/SpitterDS"
resource-ref="true" />

说明:
id,jndi-name根据实际情况设置。如果只设置了jndi-name属性,那么就会根据指定的名称查找数据源。如果应用程序运行在java应用服务器上,需要将resource-ref属性设置为true,这样给定的jndi-name会自动添加”java:comp/env”前缀(这个有什么意义待研究).另外,spring中的配置文件还可以使用EL表达式.

服务器中的配置以tomcat为例:
(1)tomcat目录下config目录下context.xml文件:

<Resource 
name="jdbc/SpitterDS" 
auth="Container" 
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/SpitterDS
username="root" 
password="jdzxdb" 
maxActive="100" 
maxIdle="30" 
maxWait="60" 
wait_timeout="18800" 
/>

其中
name 表示指定的jndi名称(需要与spring中的配置文件一致)
auth 表示认证方式,一般为Container
type 表示数据源床型,使用标准的javax.sql.DataSource
username 表示数据库用户名
password 表示数据库用户的密码
driverClassName 表示JDBC DRIVER
url 表示数据库URL地址

(2)tomcat目录下config目录下server.xml文件(与第一种类似):

2.使用第三方数据源连接池

如果你不能从JNDI中查找数据源,那么第二个选择是在spring中配置数据源连接池,spring中没有数据源连接池的实现,但是有很多解决方案,比如开源的实现:

Apache CommonsDBCP(http://jakarta.apache.org/commons/dbcp)
c3p0(http://sourceforge.net/projects/c3p0/)
BoneCP(http://jolbox.com/)

举例配置DBCP BasicDataSource的方式:

<bean id="datasource" class="org.apache.dbcp.BasicDatasource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:tcp://localhost/~/spitter"
p:useername:"sa"
p:password=""
p:initialSize="5"
p:maxActive="10"/>

3.基于jdbc驱动的数据源

spring自身提供了三个没有连接池功能的数据源类(均位于org.springframework.jdbc.datasource包中)

DriverManagerDatasource
SimpleDriverDatasource
SingleConnectionDatasource

直接在spring中配置即可:

<bean
id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="org.h2.Driver"
p:url="jdbc:h2:tcp://localhost/~/spitter"
p:useername:"sa"
p:password=""
/>

与具备池功能的数据源相比,唯一的区别在于这些数据源bean都没有提供连接池功能.这种配置最好只在测试的时候使用.

4.使用嵌入式的数据源

使用环境:一般用于开发和测试
嵌入式数据库(embedded database)作为应用的一部分运行而不是应用连接的独立数据库服务器
好处:每次重启应用或运行测试的时候都能够重新填充测试数据

spring的jdbc命名空间你能够简化嵌入式数据库的配置。

<jdbc:embedded-database id="datasource" type="H2">
<jdbc:script location="com/habuma/spitter/db/jdbc/schema.sql"/>
<jdbc:script location="com/habuma/spitter/db/jdbc/test-data.sql"/>
<jdbc:embeded-database/>

type设置为H2表明嵌入式数据库是H2(如果类型为DERBY,那么表明要使用的是Apache Derby嵌入式数据库),要确保H2在应用的类路径下(嵌入式数据库是作为应用的一部分)。多个script元素用来搭建数据库,schema.sql包含了数据库中创建表的sql,test-data.sql包含了将测试数据填充到数据库中的sql.

上面的这些配置均是xml文件的配置方式,还可以使用spring的@Bean的方式(javaConfig方式)

另:jndi介绍可参考博文()[http://javacrazyer.iteye.com/blog/759485]

你可能感兴趣的:(spring)