Spring配置DataSource数据源

在Spring框架中有如下3种获得DataSource对象的方法:

1.从JNDI获得DataSource.

2.从第三方的连接池获得DataSource.

3.使用DriverManagerDataSource获得DataSource.

一、从JNDI获得DataSource

SpringJNDI数据源配置信息:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName">

<value>java:comp/env/jcptDataSourceJNDI</value>

</property>

</bean>

jcptDataSourceJNDI是tomcat或者其他应用服务器配置的JNDI.

2、关于JNDI的配置(tomcat):

修改tomcat目录conf/context.xml文件或server.xml文件:

<Resource name="jcptDataSourceJNDI" auth="Container"

type="javax.sql.DataSource"

maxActive="100"

maxIdle="30"

maxWait="10"

username="tysp"

password="12345678"

driverClassName="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:thin:@192.168.1.35:1521:orcl"

/>

在server.xml中加入<Resource>元素:<Resource>元素用来定义JNDI Resource。

属性:描述

name:指定Resource的JNDI名字

auth:指定管理Resource的Manager,它有两个可选值:Container、Application

type:指定Resource所属的Java类名

<Resource>元素中加入<ResourceParams>元素:<ResourceParams>元素用来指定各种参数值(也可以像上面那样配置)

属性:描述

factory       指定生成的DataResource的factory类名

maxActive     指定数据库连接池中处于活动状态的最大连接数目,0表示不受限制

maxIdle       指定数据库连接池中处于空闲状态的最大连接数目,0表示不受限制

maxWait       指定连接池中连接处于空闲状态的最长时间,超过会抛出异常,-1表示无限

username      指定连接数据库的用户名

password      指定连接数据库的口令

driverClassName    指定连接数据库的JDBC驱动程序

url             指定连接数据库的URL

3、通过JNDI获取DataSource:

Context context = new InitialContext();

DataSource ds = (DataSource)context.lookup("java:comp/env/jcptDataSourceJNDI");

4.在web.xml中加入(spring配置中可以不用)

<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>

在web.xml中加入<resource-ref>元素:<resource-ref>元素表示在Web应用中引用JNDI资源  

属性:描述

description     对所引用的资源的说明

res-ref-name    指定所引用资源的JNDI名字,与<Resource>元素中的name属性对应

res-type        指定所引用资源的类名字,与<Resource>元素中的type属性对应

res-auth        指定所引用资源的Manager,与<Resource>元素中的auth属性对应

更多信息:可以参考http://blog.csdn.net/cyxlzzs/article/details/7352837

二、从第三方的连接池获得DataSource

Spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0

1) DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖 Jakarta commons-pool对象池机制的数据库连接池,

所以在类路径下还必须包括/lib/jakarta- commons/commons-pool.jar。

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>

<property name="url" value="jdbc:oracle:thin:@192.168.1.35:1521:orcl"></property>

<property name="username" value="or_meal"></property>

<property name="password" value="or_meal"></property>

<property name="maxActive" value="100"></property>

<property name="maxIdle" value="30"></property>

<property name="maxWait" value="10"></property>

<property name="defaultAutoCommit" value="false"></property>

</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >

<property name="dataSource">

<ref bean="dataSource" />

</property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect

</prop>

<prop key="show_sql">true</prop>

<prop key="format_sql">true</prop>

</props>

</property>

<property name="mappingResources">

<list></list>

</property>

</bean>

BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性,

以便Spring容器关闭时,数据源能够正常关闭。除以上必须的数据源属性外,还有一些常用的属性:

defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;

defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;

maxActive:最大连接数据库连接数,设置为0时,表示没有限制;

maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;

maxWait:最大等待秒数,单位为毫秒, 超过时间会报出错误信息;

validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据;

removeAbandoned:是否自我中断,默认是 false ;

removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;

logAbandoned:是否记录中断事件, 默认为 false;

2)C3P0是一个开放源代码的JDBC数据源实现项目,C3P0类包位于Spring中lib/c3p0/c3p0-0.9.1.2.jar。

<bean

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >

<property name="locations">

<value>classpath:jdbc.properties</value>

</property>

</bean>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method=”close”>

<property name="driverClass"value="${jdbc.driverClassName}"/>

<property name="jdbcUrl"value="${jdbc.url}"/>

<property name="user"value="${jdbc.username}"/>

<property name="password"value="${jdbc.password}"/>

</bean>

三、使用DriverManagerDataSource获得DataSource

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName">

<value>oracle.jdbc.driver.OracleDriver</value>

</property>

<property name="url">

<value>jdbc:oracle:thin:@192.168.1.35:orcl</value>

</property>

<property name="username">

<value>or_meal</value>

</property>

<property name="password">

<value>or_meal</value>

</property>

</bean>

<bean id="dataBean" class="onlyfun.caterpillar.DataBean">

<property name="dataSource">

<ref bean="dataSource"/>

</property>

</bean>

DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用

Spring配置DataSource数据源,布布扣,bubuko.com

时间: 2024-11-03 21:52:24

Spring配置DataSource数据源的相关文章

Spring配置动态数据源-读写分离和多数据源

在现在互联网系统中,随着用户量的增长,单数据源通常无法满足系统的负载要求.因此为了解决用户量增长带来的压力,在数据库层面会采用读写分离技术和数据库拆分等技术.读写分离就是就是一个Master数据库,多个Slave数据库,Master数据库负责数据的写操作,slave库负责数据读操作,通过slave库来降低Master库的负载.因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验.我们通常的做法

Spring配置c3p0数据源时出错报:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

今天在使用Spring配置c3p0数据源时,使用的数据库是mysql,服务器是tomcat,运行时报了一个 java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector 网络上找了很久都没有解决,最后发现是因为:         C3P0 少了个 jar 包,mchange-commons-java-0.2.3.1.jar 因为c3p0.jar依赖另一个jar包,就是mchange-commons-java-0.2.3.1.jar.

spring配置datasource三种方式

1.使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">           

spring配置datasource三种方式 数据库连接池

尊重原创(原文链接):http://blog.csdn.net/kunkun378263/article/details/8506355 1.使用org.springframework.jdbc.datasource.DriverManagerDataSource 说明:DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用. <bean id="dataSource" class="org.springf

spring 配置多数据源 (案例)

*.properties配置: <!--数据连接配置一--> jdbc.type=mysqljdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3066/qshop?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false&allowMultiQueries=true&serverTimezone=GMT%2b8j

jpa+spring配置多数据源

property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties>

Spring配置多数据源

1.Spring关于数据源部分的配置文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://ww

spring 配置双数据源并读写分离

摘自 开源项目Ibase4j    关键思想在于AbstractRoutingSource 类 还有方法名称和切入点去控制使用哪个数据源    1.首先在配置文件配置多个数据源 并且交给继承自spring AbstractRoutingSource去管理 datasource.xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfram

spring 配置多数据源 (可行)

可以看到AbstractRoutingDataSource获取数据源之前会先调用determineCurrentLookupKey方法查找当前的lookupKey,这个lookupKey就是数据源标识.因此通过重写这个查找数据源标识的方法就可以让spring切换到指定的数据源了.第一步:创建一个DynamicDataSource的类,继承AbstractRoutingDataSource并重写determineCurrentLookupKey方法,代码如下: 1 public class Dyn