程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring中如何配置DataSource數據源

Spring中如何配置DataSource數據源

編輯:關於JAVA

在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,根本沒有連接池的作用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved