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去了。。。。