2013-06-12 13 views
8

Ich bin gestolpert auf ein Problem bei der Entwicklung einer Web-Anwendung basierend auf Struts2 mit Spring und Hibernate.Konfigurieren Hibernate C3P0 Connection Pooling

Wenn ich die Site ein paar Mal aktualisiere, zum Beispiel 2-4 Mal, zeigt Hibernate eine Ausnahme an Zu viele Verbindungen. Ich habe versucht, C3P0 Verbindungspool zu implementieren und haben einige Probleme mit ihm


Die hibernate.cfg.xml Konfiguration:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/axelle</property> 
<property name="hibernate.connection.username">axelle</property> 
<property name="hibernate.connection.password">dbpassword</property> 
<property name="hibernate.current_session_context_class">thread</property>  

<property name="hibernate.c3p0.min_size">5</property> 
<property name="hibernate.c3p0.max_size">20</property> 
<property name="hibernate.c3p0.timeout">300</property> 
<property name="hibernate.c3p0.max_statements">50</property> 
<property name="hibernate.c3p0.idle_test_period">3000</property> 

applicationContext.xml

<bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="classpath:jdbc.properties"/> 

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
     p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.url}" 
     p:username="${jdbc.username}" 
     p:password="${jdbc.password}" 
     p:connectionProperties="${jdbc.connectionProperties}"/> 

<!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) --> 

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

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
     <ref local="sessionFactory"/> 
    </property> 
</bean> 

Die Protokollausgabe lautet:

org.hibernate.exception.JDBCConnectionException: Cannot open connection 

und:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" 

Und so PROCESS MySQL Fenster aussieht: http://img844.imageshack.us/img844/3959/be69273cc2.png


I max_size von Verbindungen auf 20 festgelegt haben, aber es scheint, wie es doesn‘ t Lesen Sie die C3P0-Konfiguration aus der Datei, weil auf dem Bildschirm sehen, dass die Anzahl der Verbindungen höher als 20 ist, oder vielleicht mache ich etwas falsch, aber wo? Ich brauche wirklich Hilfe, ich schätze das und danke im Voraus.

+1

Können Sie sicherstellen, dass Sie alle schließen die Verbindungen, die du öffnest. Das ist die Hauptursache für Verbindungsleck –

+0

Sorry, aber das ist das erste Mal, wenn ich versuche, einen Verbindungspool zu implementieren, können Sie Ratschläge geben, wie ich es schließen muss? aber ich versuche trotzdem, alle Sitzungen zu schließen, nachdem ich die Datenbank mit transaction.commit() abgefragt habe; '' session.flush(); '' session.close(); '. – Denees

+2

Warum denken Sie, dass c3p0 Ihr Verbindungsanbieter ist? –

Antwort

12

erwähnen diese Eigenschaft in Ihrer hibernate.cfg.xml Datei

<property name="hibernate.c3p0.acquire_increment">1</property> 
    <property name="hibernate.c3p0.idle_test_period">100</property> 
    <property name="hibernate.c3p0.max_size">10</property> 
    <property name="hibernate.c3p0.max_statements">10</property> 
    <property name="hibernate.c3p0.min_size">10</property> 
    <property name="hibernate.c3p0.timeout">100</property> 

diesen Link finden Sie zum besseren Verständnis: Configuration Properties

+0

Ihre Lösung funktioniert gut, danke dafür :) – Denees

1

In Ihrem application statt <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" ... die Verwendung versuchen, mit <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" ... Die C3P0PooledDataSource wird erstellen eine umschlossene Datenbankverbindung mit dem angegebenen DriverClassName, URL, Benutzername und Passwort

Verwandte Themen