對於Oracle Pooling連接,我使用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>
的數據庫連接類:
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的嘗試,與資源的語法我的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;
}
無法弄清楚實際問題在哪裏。我應該使用c3p0而不是OracleDataSource嗎?在我的代碼中有沒有ojdbc7中的錯誤或錯誤?
提前致謝!
您應該發佈'DbConnect'代碼 –
我已編輯帖子。請參閱更改 – 0bj3ct
dba認爲適合多少個連接,以及Oracle數據源中的默認設置是什麼。 – KarlP