2016-07-13 30 views
1

Ich arbeite an Web-Java-Anwendung mit Hibernate, und ich bekomme immer Speicher-Low-Fehler für Tonnen von Java-inaktiven Sitzungen auf meinem Oracle-DB. Ich habe versucht, diese unbenutzten Sitzungen mit c3p0 Timeout-Konfiguration zu schließen, aber es funktioniert überhaupt nicht. das ist meine Hibernate Config und meine offenen Sitzungen nach einigen Minuten: (der kommentierten Code unten ist, wenn ich versuchte, gemeinsame dbcp einem der Antworten auf ähnliche Fragen und Timeout-Zeiten eingestellt für den Test auf 30 Sekunden beziehen verwenden.)Hibernate: Warum c3p0 Timeout nicht funktioniert?

<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> 
    <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> 
    <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:test</property> 
    <property name="hibernate.connection.username">tams_test</property> 
    <property name="hibernate.connection.password">test1234</property> 
    <property name="hibernate.show_sql">true</property> 
    <property name="hibernate.current_session_context_class">thread</property> 
    <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
    <property name="hibernate.connection.isolation">2</property> 
    <property name="org.hibernate.flushMode">COMMIT</property> 
    <property name="hibernate.cache.use_query_cache">false</property> 
    <property name="hibernate.transaction.auto_close_session">true</property> 
    <property name="hibernate.order_updates">true</property> 
    <property name="hibernate.order_inserts">true</property> 
    <!-- <property name="hibernate.dbcp.initialSize">3</property> 
    <property name="hibernate.dbcp.maxIdle">50</property> 
    <property name="hibernate.dbcp.minIdle">0</property> 
    <property name="hibernate.dbcp.maxWait">180000</property> 
    <property name="hibernate.dbcp.maxConnLifetimeMillis">30000</property> 
    <property name="hibernate.dbcp.defaultQueryTimeout">1</property>--> 
    <property name="hibernate.c3p0.min_size">1</property> 
    <property name="hibernate.c3p0.max_size">150</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.timeout">30</property> 
    <property name="hibernate.c3p0.idle_test_period">30</property> 
    <property name="hibernate.c3p0.idleConnectionTestPeriod">30</property> 
    <property name="c3p0.testConnectionOnCheckout">true</property> 
    <property name="testConnectionOnCheckin">true</property> 
    <property name="c3p0.maxConnectionAge">30</property> 
    <property name="maxIdleTimeExcessConnections">30</property> 
    <property name="connection.provider_class"> 
     org.hibernate.connection.C3P0ConnectionProvider 
    </property> 

offene Sitzungen auf oracle db nach einigen Minuten enter image description here

+0

ich auch dieses Problem konfrontiert sind, haben Sie es lösen? – Lev

+0

Können Sie Ihre DataSource-Bean anzeigen? – Lev

Antwort

0

ich Ihr Problem zu konfrontiert, und Hibernate wollte nicht meine Parameter c3p0 anzuwenden, so änderte ich meine Datenquelle und es ist mein Problem inaktiver vollständig gelöst Sitzungen.

Versuchen Sie Setup Ihrer Datenquelle Bohne wie folgt aus:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="jdbcUrl" value="jdbc:oracle:thin:@xxxx:1521:xxx"/> 
    <property name="user" value="xx"/> 
    <property name="password" value="xxxx"/> 

    <property name="maxStatements" value="1000"/> 
    <property name="maxIdleTime" value="30"/> 
    <property name="maxPoolSize" value="100"/> 
    <property name="minPoolSize" value="10"/> 
    <property name="initialPoolSize" value="10"/> 
    <property name="idleConnectionTestPeriod" value="20"/> 

</bean>