我有一個使用Hibernate 4.1.1和Spring 3.1.1和Postgres 9.2的Java/Wicket的Web應用程序。我也使用spring事務API和c3p0連接池。Postgres閒置連接:CannotAcquireResourceException
我的問題是,所有可用的連接沒有發佈,以及執行所造成的GUI我得到下面的異常
com.mchange.v2.resourcepool.CannotAcquireResourceException一些select語句後:一個 ResourcePool不能從其主要工廠或 來源獲取資源。執行
SELECT * FROM pg_stat_activity;
表明, 有很多空閒的查詢是這樣的:SELECT NULL AS TABLE_CAT, n.nspname AS TABLE_SCHEM, c.relname AS TABLE_NAME, CASE n.nspname ~ '^pg_' OR n.nspname = 'information_schema' WHEN true THEN CASE WHEN n.nspname = 'pg_catalog' OR n.nspname = 'information_schema' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TABLE' WHEN 'v' THEN 'SYSTEM VIEW' WHEN 'i' THEN 'SYSTEM INDEX' ELSE NULL END WHEN n.nspname = 'pg_toast' THEN CASE c.relkind WHEN 'r' THEN 'SYSTEM TOAST TABLE' WHEN 'i' THEN 'SYSTEM TOAST INDEX' ELSE NULL END ELSE CASE c.relkind
WHEN 'r' THEN 'TEMPORARY TABLE' WHEN 'i' THEN 'TEMPORARY INDEX'
WHEN 'S' THEN 'TEMPORARY SEQUENCE' WHEN 'v' THEN 'TEMPORARY VIEW'
ELSE NULL END END WHEN false THEN CASE c.relkind WHEN 'r' THEN 'TABLE' WHEN 'i' THEN 'INDEX' WHEN 'S' THEN 'SEQUENCE' WHEN 'v' THEN 'VIEW' WHEN 'c' THEN 'TYPE' ELSE NULL END ELSE NULL END AS TABLE_TYPE, d.description AS REMARKS FROM pg_catalog.pg_namespace n, pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_description d ON (c.oid = d.objoid AND d.ob
這是我的applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.1.xsd"
default-autowire="byName">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="org.postgresql.Driver"/>
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/mydatabase"/>
<property name="user" value="myuser"/>
<property name="password" value="mypassword"/>
<!-- configuration pool via c3p0 -->
<property name="initialPoolSize" value="3"/>
<property name="minPoolSize" value="3"/>
<property name="maxPoolSize" value="30"/>
<property name="idleConnectionTestPeriod" value="600"/>
<property name="maxIdleTime" value="0"/>
<property name="maxStatements" value="0"/>
<property name="maxStatementsPerConnection" value="0"/>
<property name="acquireIncrement" value="1"/>
<property name="acquireRetryAttempts" value="3"/>
<property name="acquireRetryDelay" value="1000"/>
<property name="autoCommitOnClose" value="false"/>
<property name="maxConnectionAge" value="14400"/>
<property name="forceIgnoreUnresolvedTransactions" value="false"/>
<property name="numHelperThreads" value="20"/>
<property name="testConnectionOnCheckin" value="false"/>
<property name="testConnectionOnCheckout" value="false"/>
<property name="maxAdministrativeTaskTime" value="0"/>
<property name="debugUnreturnedConnectionStackTraces" value="false"/>
<property name="maxIdleTimeExcessConnections" value="0"/>
<property name="breakAfterAcquireFailure" value="false"/>
<property name="checkoutTimeout" value="0"/>
<property name="unreturnedConnectionTimeout" value="0"/>
<property name="usesTraditionalReflectiveProxies" value="false"/>
</bean>
<bean id="exampleDao"
class="com.mycompany.persistence.hibernate.daoimpl.ExampleDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.mycompany.model.Example</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
<prop key="hibernate.auto_close_session">true</prop>
<prop key="hibernate.c3p0.maxSize">30</prop>
<prop key="hibernate.c3p0.minSize">1</prop>
<prop key="hibernate.c3p0.acquireIncrement">1</prop>
<prop key="hibernate.c3p0.idleTestPeriod">300</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
<prop key="hibernate.c3p0.maxStatements">0</prop>
<prop key="hibernate.c3p0.unreturnedConnectionTimeout">30</prop>
<prop key="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</prop>
<prop key="hibernate.c3p0.checkoutTimeout">0</prop>
<prop key="hibernate.c3p0.preferredTestQuery">SELECT * FROM dual</prop>
</props>
</property>
</bean>
<!-- Transaction Management -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
</beans>
配置是否正確?
我的類從數據庫中檢索的數據是這樣的:
@Repository
public class ExampleDaoImpl extends BaseDaoImpl implements ExampleDao {
...
@Override
@Transactional(readOnly=true)
public List<Example> findExampleByCompanyAndType(Company company,
int type) {
return sessionFactory.getCurrentSession()
.createCriteria(Example.class)
.add(Restrictions.eq("company.companyId",
company.getCompanyId()))
.add(Restrictions.eq("type", type)).list();
}
...
}
謝謝你的快速回答,但這並沒有解決問題。它將空閒查詢更改爲'SET SESSION CHARACTERISTICS as TRANSACTION READ WRITE'和'SHOW TRANSACTION ISOLATION LEVEL'' – Dani
我將繼續啓用: 和 –
matthudson
我也可以嘗試轉換到不同的連接池此時我已經運行Apache dbcp以及Tomcat的新內置存儲池,都可以在容器中配置,並通過JNDI連接到您的應用程序。 – matthudson