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

spring配置数据源的几种方法

2016-12-12 12:25 357 查看

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息