Spring中配置DataSource数据源的几种选择
Spring中配置DataSource數(shù)據(jù)源的幾種選擇
在Spring框架中有如下3種獲得DataSource對(duì)象的方法:
- 從JNDI獲得DataSource.
- 從第三方的連接池獲得DataSource.
- 使用DriverManagerDataSource獲得DataSource.
一、從JNDI獲得DataSource
SpringJNDI數(shù)據(jù)源配置信息:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jcptDataSourceJNDI</value> </property>
</bean> jcptDataSourceJNDI是tomcat或者其他應(yīng)用服務(wù)器配置的JNDI.
關(guān)于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>元素用來(lái)定義JNDI Resource。
屬性:描述
name:指定Resource的JNDI名字
auth:指定管理Resource的Manager,它有兩個(gè)可選值:Container、Application
type:指定Resource所屬的Java類(lèi)名
<Resource>元素中加入<ResourceParams>元素:<ResourceParams>元素用來(lái)指定各種參數(shù)值(也可以像上面那樣配置)
屬性:描述
factory ? ? ? 指定生成的DataResource的factory類(lèi)名
maxActive ? ? 指定數(shù)據(jù)庫(kù)連接池中處于活動(dòng)狀態(tài)的最大連接數(shù)目,0表示不受限制
maxIdle ? ? ? 指定數(shù)據(jù)庫(kù)連接池中處于空閑狀態(tài)的最大連接數(shù)目,0表示不受限制
maxWait ? ? ? 指定連接池中連接處于空閑狀態(tài)的最長(zhǎng)時(shí)間,超過(guò)會(huì)拋出異常,-1表示無(wú)限
username ? ? ?指定連接數(shù)據(jù)庫(kù)的用戶(hù)名
password ? ? ?指定連接數(shù)據(jù)庫(kù)的口令
driverClassName ? ?指定連接數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序
url ? ? ? ? ? ? 指定連接數(shù)據(jù)庫(kù)的URL
3、通過(guò)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應(yīng)用中引用JNDI資源
屬性:描述
description ? ? 對(duì)所引用的資源的說(shuō)明
res-ref-name ? ?指定所引用資源的JNDI名字,與<Resource>元素中的name屬性對(duì)應(yīng)
res-type ? ? ? ?指定所引用資源的類(lèi)名字,與<Resource>元素中的type屬性對(duì)應(yīng)
res-auth ? ? ? ?指定所引用資源的Manager,與<Resource>元素中的auth屬性對(duì)應(yīng)
更多信息:可以參考http://blog.csdn.net/cyxlzzs/article/details/7352837
二、從第三方的連接池獲得DataSource
Spring在第三方依賴(lài)包中包含了兩個(gè)數(shù)據(jù)源的實(shí)現(xiàn)類(lèi)包,其一是Apache的DBCP,其二是 C3P0
1) DBCP類(lèi)包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一個(gè)依賴(lài) Jakarta commons-pool對(duì)象池機(jī)制的數(shù)據(jù)庫(kù)連接池,
所以在類(lèi)路徑下還必須包括/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()方法關(guān)閉數(shù)據(jù)源,所以必須設(shè)定destroy-method=”close”屬性,
以便Spring容器關(guān)閉時(shí),數(shù)據(jù)源能夠正常關(guān)閉。除以上必須的數(shù)據(jù)源屬性外,還有一些常用的屬性:
defaultAutoCommit:設(shè)置從數(shù)據(jù)源中返回的連接是否采用自動(dòng)提交機(jī)制,默認(rèn)值為 true;
defaultReadOnly:設(shè)置數(shù)據(jù)源是否僅能執(zhí)行只讀操作, 默認(rèn)值為 false;
maxActive:最大連接數(shù)據(jù)庫(kù)連接數(shù),設(shè)置為0時(shí),表示沒(méi)有限制;
maxIdle:最大等待連接中的數(shù)量,設(shè)置為0時(shí),表示沒(méi)有限制;
maxWait:最大等待秒數(shù),單位為毫秒, 超過(guò)時(shí)間會(huì)報(bào)出錯(cuò)誤信息;
validationQuery:用于驗(yàn)證連接是否成功的查詢(xún)SQL語(yǔ)句,SQL語(yǔ)句必須至少要返回一行數(shù)據(jù);
removeAbandoned:是否自我中斷,默認(rèn)是 false ;
removeAbandonedTimeout:幾秒后數(shù)據(jù)連接會(huì)自動(dòng)斷開(kāi),在removeAbandoned為true,提供該值;
logAbandoned:是否記錄中斷事件, 默認(rèn)為 false;
2)C3P0是一個(gè)開(kāi)放源代碼的JDBC數(shù)據(jù)源實(shí)現(xiàn)項(xiàng)目,C3P0類(lèi)包位于Spring中l(wèi)ib/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建立連接是只要有連接就新建一個(gè)connection,根本沒(méi)有連接池的作用
總結(jié)
以上是生活随笔為你收集整理的Spring中配置DataSource数据源的几种选择的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2022-2028年中国车载充电机行业深
- 下一篇: 求华尔街之狼电影资源谢谢了