spring數據源DriverManagerDataSource和BasicDataSource

    提及來沒什麼好說的東西,Java後臺的配置仍是照樣的配,服務一直調用着正歡的時候發現跑個1000條記錄tomcat就會有報錯,大體錯誤以下:
org.springframework.tr ansaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
    這問題,一看就是跟數據庫有關。大概找了下資料,再看了下本身的程序配置,發現個人數據源是這麼配的:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
        <property name="username" value="admin" />
        <property name="password" value="admin" />
</bean>
    再看看之前的數據源有這麼配的:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
        <property name="username" value="admin" />
        <property name="password" value="admin" />
    </bean>

    好吧,那就熟悉下spring的DriverManagerDataSource與apache的BasicDataSource。 spring

    首先,DriverManagerDataSource在每一個鏈接請求時都新建一個鏈接,DriverManagerDataSource提供的鏈接沒有進行池管理,當鏈接數到達必定的大小會出現異常。 數據庫

    DBCP(Database Connection Pool)是一個依賴Jakarta commons-pool對象池機制的數據庫鏈接池,J2EE 服務器啓動時會創建必定數量的池鏈接,並一直維持很多於此數目的池鏈接。客戶端程序須要鏈接時,池驅動程序會返回一個未使用的池鏈接並將其表記爲忙。若是當前沒有空閒鏈接,池驅動程序就新建必定數量的鏈接,新建鏈接的數量有配置參數決定。當使用的池鏈接調用完成後,池驅動程序將此鏈接表記爲空閒,其餘調用 就可使用這個鏈接。 至關因而優化了DataSource的一種工具。 apache

    因此很容易想到,多是鏈接數量形成的。因此我把數據源鏈接改爲了DBCP的,maven工程添加了下面的依賴。在此以前還遇到個小問題,我使用了1.2.1的版本,結果啓動時候會報錯,意思是找不到commons-collenctions.jar包在打包出來的部署在服務器上的竟然沒有報錯,多是服務器上存在這個包。納悶了,這個包怎麼回事,org.apache.commons.collections.map.LRUMap路徑不對。因此果斷不糾結,換了個1.4的,一切正常。: tomcat

    <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
    </dependency>
    好吧 ,稍微介紹記錄下來備忘,繼續糾結MQ去了。。。。
相關文章
相關標籤/搜索