고객의 요청을 처리하는 웹 서버가 있습니다. 이 웹 서버의 한 구성 요소는 데이터베이스에 대한 연결을 유지합니다.JDBC 연결이 여전히 괜찮은지 확인하는 안전한 방법이 있습니까?
연결을 종료했는지 또는 사용하기 전에 더 이상 작동하지 않는지를 알아야합니다. 현재 나는 다음과 같은 것을합니다 :
// Decide connection details on alias.
private String alias = null;
// I must have my own because I prepare statements.
private Connection connection = null;
public Connection getConnection() {
try {
if (connection.isClosed()) {
// Start afresh.
connection = null;
}
// ** More tests here to check connection is ok.
if (connection == null) {
// Make a new connection.
connection = Connections.getConnection(alias);
}
} catch (SQLException ex) {
// Cause a NPE further down the line.
connection = null;
}
return connection;
}
슬프게도 이것은 때때로 여러 가지 오류 중 하나가 발생하는 부실 연결을 반환합니다. 그러한 모습처럼 :
은 java.sql.SQLException : 이오 예외 : 이것은 단지 기록 된 오류 중 하나입니다
참고 소켓 쓰기 오류 및이 하나에 대한 후 발생 : 소프트웨어 때문에 연결이 중단되었습니다 72 시간 동안 유휴 상태.
내가 찾고있는 것은 연결이 작동되고 안정적인지 지속적으로 알려주는 최소한의 데이터베이스 일반 테스터입니다. 이것이 가능한가?
아주 작은 쿼리를 실행해도 상관 없지만 데이터베이스에 무관심하고 시간/리소스가 거의 필요하지 않습니다.
현재 : Java 5에서 실행 중이므로 Connection.isValid
은 해결책이 아닙니다.
나중에이 질문을 방문 당신의 사람들을 위해
추가 - 나는 결국 조언을 제공했다 진짜 연결 풀로 이동 만 할일까요 쉽게 아니었다 그러나 모든의 내 문제가 사라졌습니다.
유일하게 이상한 부분은 연결 풀에서 close
연결을 완료해야한다는 사실을 깨닫는 것입니다. 풀은 닫기를 가로 채서 뒤에서 풀로 반환합니다.
연결을 일상적인 문제로 확인하는 준비가 된 연결 풀과 비교할 때 어떤 점이 있습니까? –
@MarkoTopolnik - 아무것도 - 그런대로 -하지만 나는 이러한 연결에 첨부 된 진술을 준비 했으므로 직접 처리해야합니다. 아니면 내가? – OldCurmudgeon
사실 그것은 준비된 명령문 풀을 사용하여 이러한 풀도 처리해야하는 문제입니다. BTW 내 선택은 * boneCP * 될 것입니다. –