Spring 3.0.5.RELEASE と Postgres 9.1 を使用しています。接続の最大数を 17 に制限しています。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${database.driver}" />
<property name="jdbcUrl" value="${database.url}" />
<property name="user" value="${database.username}" />
<property name="password" value="${database.password}" />
<property name="initialPoolSize" value="3" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="17" />
</bean>
アプリケーションがすべての接続を占有すると、ハングするだけで、トランザクションをキャンセルしたり受け入れたりしなくなります。Postgres のすべてのプロセスは、「トランザクションでアイドル状態」の状態にあります。
ありがとうございました!