Oracleプール接続ではoracle.jdbc.pool.OracleDataSource
を使用しますが、接続はデータベース内に存続しているようです。 Oracleデータベースに接続している間今日、私はエラーを得た:SpringのOracleデータソースで接続が破棄されない
ORA-12516:TNS:リスナーは、一致するプロトコルスタック
で利用可能なハンドラを見つけることができなかったと私は、データベース管理者によって言われた、あまりにも多くのこと開いている接続はアプリケーションから「IDLE」モードのままです。
私はojdbc7使用:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.1</version>
</dependency>
春applicationContext.xmlをファイル:
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="URL" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="connectionCachingEnabled" value="true" />
</bean>
DBCONNECTクラス:
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class DbConnect {
@Autowired
private DataSource dataSource;
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
また、私はJDK7のtry-と資源の構文を使用します接続のための私のDAOレベル:
@Autowired
private DbConnect dbConnect;
public List<User> getAllUsers() {
List<User> list = new ArrayList<>();
try(Connection connection = dbConnect.getConnection()) {
try(PreparedStatement preparedStatement = connection.prepareStatement("select * from V_USERS t")) {
try(ResultSet resultSet = preparedStatement.executeQuery()) {
while(resultSet.next()) {
list.add(RowFetcher.fetchUser(resultSet));
}
}
}
}
catch(Exception e) {
log.error(e.getMessage(), e);
}
return list;
}
実際の問題はどこにあるのかわかりません。 OracleDataSourceではなくc3p0を使用する必要がありますか? ojdbc7にバグがありますか、コードにエラーがありますか?
ありがとうございます!
'DbConnect'のコードを投稿してください。 –
投稿を編集しました。変更内容を確認してください – 0bj3ct
データベースの接続数は適切か、Oracleデータソースのデフォルト設定は何ですか? – KarlP