Spring配置數據源的經常使用方式

Spring配置數據源的經常使用方式

  1. 在應用程序中配置數據源
    (1).在classpath中建立鏈接參數的配置文件,如db-config.properties,內容以下:
    driverClass=com.mysql.jdbc.Driver  
    url=jdbc:mysql://localhost:3306/zzp  
    username=root  
    password=admin

    (2).在Spring的配置文件中引入參數配置文件,代碼以下: java

    <!-- 配置spring資源文件 -->  
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
            <property name="locations">    
                <list>    
                    <value>/WEB-INF/config/db-config.properties</value>    
                </list>    
            </property>    
        </bean>

    (3).配置數據源(這裏有三種方式,jdbc、dbcp、c3p0) mysql

        A.JDBC的配置方式,該方式區別與其餘兩種方式在於這種方式使用的是JDBC鏈接數據庫,並無使用鏈接池,因此效率和性能方面不及其餘兩種,該種方式的配置方法:
            
    <!-- 數據源 -->  
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
            <property name="driverClassName"  
                value="${driverClass}">  
            </property>  
            <property name="url" value="${url}">  
            </property>  
            <property name="username" value="${username}"></property>  
            <property name="password" value="${password}"></property>  
        </bean>

        B.使用dbcp的配置(參考文章): web

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
            <property name="driverClassName" value="referredDriver" />  
            <property name="url" value="referredDBURL" />  
            <property name="username" value="DBLoginUser" />  
            <property name="password" value="DBLoginUserPassword" />  
            <property name="initialSize" value="5" />  
            <property name="maxIdle" value="30" />  
            <property name="minIdle" value="5" />  
            <property name="maxActive" value="15" />  
            <property name="removeAbandoned" value="true" />  
            <!-- 自動回收超時時間(以秒數爲單位) -->  
            <property name="removeAbandonedTimeout" value="300" />  
            <!--超時等待時間以毫秒爲單位 -->  
            <property name="maxWait" value="3000" />  
            <property name="defaultAutoCommit" value="false" />  
            <property name="validationQuery">  
                <value>SELECT 1</value>  
            </property>  
            <property name="testOnBorrow">  
                <value>true</value>  
            </property>  
            <property name="testOnReturn">  
                <value>false</value>  
            </property>  
        </bean>

    C.使用C3P0方式配置(參考文章) spring

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">    
              <!-- 用戶名-->    
              <property name="user" value="${username}"/>    
              <!-- 用戶密碼-->    
              <property name="password" value="${password}"/>    
              <property name="driverClass" value="${driver_class}"/>    
              <property name="jdbcUrl" value="${url}"/>    
        
               <!--鏈接池中保留的最大鏈接數。默認值: 15 -->     
              <property name="maxPoolSize" value="20"/>    
              <!-- 鏈接池中保留的最小鏈接數,默認爲:3-->    
              <property name="minPoolSize" value="2"/>    
              <!-- 初始化鏈接池中的鏈接數,取值應在minPoolSize與maxPoolSize之間,默認爲3-->    
              <property name="initialPoolSize" value="2"/>    
        
              <!--最大空閒時間,60秒內未使用則鏈接被丟棄。若爲0則永不丟棄。默認值: 0 -->     
              <property name="maxIdleTime">60</property>    
                  
              <!-- 當鏈接池鏈接耗盡時,客戶端調用getConnection()後等待獲取新鏈接的時間,超時後將拋出SQLException,如設爲0則無限期等待。單位毫秒。默認: 0 -->     
              <property name="checkoutTimeout" value="3000"/>    
                  
              <!--當鏈接池中的鏈接耗盡的時候c3p0一次同時獲取的鏈接數。默認值: 3 -->     
              <property name="acquireIncrement" value="2"/>    
        
             <!--定義在從數據庫獲取新鏈接失敗後重復嘗試的次數。默認值: 30 ;小於等於0表示無限次-->     
              <property name="acquireRetryAttempts" value="0"/>    
        
              <!--從新嘗試的時間間隔,默認爲:1000毫秒-->     
              <property name="acquireRetryDelay" value="1000" />    
        
              <!--關閉鏈接時,是否提交未提交的事務,默認爲false,即關閉鏈接,回滾未提交的事務 -->     
              <property name="autoCommitOnClose">false</property>    
        
              <!--c3p0將建一張名爲Test的空表,並使用其自帶的查詢語句進行測試。若是定義了這個參數那麼屬性preferredTestQuery將被忽略。你不能在這張Test表上進行任何操做,它將只供c3p0測試使用。默認值: null -->     
              <property name="automaticTestTable">Test</property>    
        
              <!--若是爲false,則獲取鏈接失敗將會引發全部等待鏈接池來獲取鏈接的線程拋出異常,可是數據源仍有效保留,並在下次調用getConnection()的時候繼續嘗試獲取鏈接。若是設爲true,那麼在嘗試獲取鏈接失敗後該數據源將申明已斷開並永久關閉。默認: false-->     
              <property name="breakAfterAcquireFailure">false</property>    
        
              <!--每60秒檢查全部鏈接池中的空閒鏈接。默認值: 0,不檢查 -->     
              <property name="idleConnectionTestPeriod">60</property>    
              <!--c3p0全局的PreparedStatements緩存的大小。若是maxStatements與maxStatementsPerConnection均爲0,則緩存不生效,只要有一個不爲0,則語句的緩存就能生效。若是默認值: 0-->     
              <property name="maxStatements">100</property>    
              <!--maxStatementsPerConnection定義了鏈接池內單個鏈接所擁有的最大緩存statements數。默認值: 0 -->     
              <property name="maxStatementsPerConnection"></property>    
         </bean>

     

  2. 在Web服務器中配置數據源
    1.以Tomcat爲例配置數據源須要將conf/context.xml中添加以下代碼: sql

    <Resource name="jndi/myDataSource"     
                auth="Container"     
                type="javax.sql.DataSource"     
                driverClassName="com.mysql.jdbc.Driver"     
                url="jdbc:mysql://localhost:3306/zwkj"     
                username="root"     
                password="root123!"     
                maxActive="20"     
                maxIdle="10"     
                maxWait="10000"/>

    2.在客戶端應用程序中經過JNDI的方式獲取數據源,以Spring爲例,配置以下: 數據庫

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">  
            <property name="jndiName">  
                <value>java:comp/env/jndi/myDataSource</value>  
            </property>  
        </bean>

        出以上方式外還能夠使用Spring的jee標籤配置 apache

    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jndi/myDataSource" />

        注意:上面兩種方式若是配置成後不能正常獲取數據源,可在web.xml文件中添加以下代碼: 緩存

    <resource-ref>  
         <description>JNDI DataSource</description>  
         <res-ref-name>jndi/myDataSource</res-ref-name>  
         <res-type>javax.sql.DataSource</res-type>  
         <res-auth>Container</res-auth>  
    </resource-ref>

        本人在tomcat8下並未在web.xml文件中添加上述代碼,能夠測試成功,早起在Tomcat6下測試好像不加會報錯。 tomcat



                          》》》》》》》》》》》》》》》》轉載請註明出處《《《《《《《《《《《《《《《《
服務器

相關文章
相關標籤/搜索