0
JSF JavaアプリケーションでdbcpのBasicDataSource
を使用しています。基本的な慣例は、使用後に接続を閉じることです。私はcatchで行います。最後に私のコードで行います。私は私の接続を閉じないことを決定するのでただし、アプリケーションは、エラーで停止し接続プーリング:接続を閉じるかどうかを確認する
java.sql.SQLException: Connection is null.
at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.checkOpen(DelegatingConnection.java:611)
at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.createStatement(DelegatingConnection.java:258)
を磨きます。私のコードはほとんど大丈夫動作しますが、その後、多くの場合、このエラーで停止:以下
Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
は私の接続構成である: public class StageDB {
public StageDB() {}
public static Connection getConnection() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName(JDBC_DRIVER);
ds.setUsername(USER);
ds.setPassword(PASS);
ds.setUrl(DB_URL);
ds.setTimeBetweenEvictionRunsMillis(20*1000);
ds.setMinIdle(0);
ds.setMaxIdle(10);
ds.setMaxOpenPreparedStatements(100);
conn = ds.getConnection();
return conn;
}
}
私は、これらの設定で遊んで、また、使用してみたことに言及すべきですデフォルトと同じですが、同じ結果が得られます。私は何が間違っていますか?
'ds.close()'とは何ですか?データソースを作成してすぐに閉じますか? – Kayaman
これはdbcpのバグのようです。はい、必要がなくなったらconn.close()を呼び出すべきです。バックエンドがOracleの場合は、OracleのUCPを試してみましたか? –
@ Kayaman、コードはDAOによって使用されるデータソースクラスにあります。 conn(ds.getConnection()を参照)を返します。 –