2014-08-29 40 views
1

我有一個非常簡單的Hibernate項目,它連接到Oracle數據庫。如何減少超時以創建c3p0 ComboPooledDataSource並獲取Oracle數據庫連接?

如果由於某種原因無法連接到Oracle(例如網絡出現故障),則需要一分鐘才能失敗。在構建數據源時發生這種情況,並且在嘗試與數據庫進行交互時似乎也會發生。

我想改變它的設置在幾秒鐘內失敗。在改變了我相信的相關設置後,似乎沒有任何改變。 這就像我的配置被忽略。

<bean id="oracleDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" 
    destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.OracleDriver"/> 
    <property name="jdbcUrl" value="jdbc:oracle:thin:@****"/> 
    <property name="user" value="****"/> 
    <property name="password" value="****"/> 
</bean> 

<bean id="oracleSessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="oracleDataSource"/> 
    <property name="configLocation"> 
     <value>classpath:oracle.hibernate.cfg.xml</value> 
    </property> 
</bean> 

我的Hibernate配置文件:oracle.hibernate.cfg.xml:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> 
     <property name="hibernate.c3p0.max_size">1</property> 
     <property name="hibernate.c3p0.checkoutTimeout">5000</property> 
     <property name="hibernate.c3p0.acquireRetryAttempts">0</property> 
     <property name="show_sql">true</property> 
     <mapping class="****"/> 
    </session-factory> 
</hibernate-configuration> 

做我的依賴注入,appContext.xml春文件的相關部分聽說這可能是由於在classpath中沒有hibernate-c3p0-version.jar引起的,所以這裏是我測試的類路徑設置...

Classpath settings for my test

...這裏就是我的Maven的pom.xml指定的Hibernate c3p0-4.2.11.Final.jar:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-c3p0</artifactId> 
    <version>4.2.11.Final</version> 
</dependency> 

回答

1

你在你的配置中使用的注射DataSource。由於hibernate不能控制數據源,所以嘗試將配置添加到hibernate並不會起到幫助作用。在配置的彈簧上設置屬性ComboPooledDataSource

<bean id="oracleDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.OracleDriver"/> 
    <property name="jdbcUrl" value="jdbc:oracle:thin:@****"/> 
    <property name="user" value="****"/> 
    <property name="password" value="****"/> 
    <property name="acquireRetryAttempts" value="0"/> 
    <property name="checkoutTimeout" value="5000"/>  
</bean> 

從您的Hibernate配置的hibernate.c3p0性能以及增加的依賴性,這是不會被使用。

相關問題