source

JDBC 연결에 대한 네트워크 시간 초과 설정

lovecheck 2023. 7. 1. 08:59
반응형

JDBC 연결에 대한 네트워크 시간 초과 설정

Java에서 Oracle 데이터베이스 연결 네트워크 시간 초과를 설정하려고 합니다.하지만 오류가 발생하고 있습니다.아래는 샘플 코드이며 각각의 예외입니다.

try{
    conn = new Database("oracle").connect();
    conn.setNetworkTimeout(null, 30000); //I don't have an Executor, so the field is set to null
    System.out.println(Switch.date() + " -> Database Connection Initialized");
}
catch(SQLException ex){
    Logger.getLogger(Switch.class.getName()).log(Level.SEVERE, null, ex);
}

예외 사항은 다음과 같습니다.

Exception in thread "main" java.lang.AbstractMethodError:oracle.jdbc.driver.T4CConnection.setNetworkTimeout(Ljava/util/concurrent/Executor;I)V
   at ke.co.smart.Switch.<init>(Switch.java:524)
   at ke.co.smart.Switch.main(Switch.java:161)
Java Result: 1

나는 그것이 추상적인 방법과 관련이 있다고 생각합니다(AbstractMethodError 읽기).제가 생각하기에 자바 내에서 이미 정의된 방법만 구현했기 때문에 아마도 이 오류를 일으킬 수 있는 것은 컴파일을 거부하지 않습니다.

N.B.: Java는 추상적인 방법이 있는 경우 구체적인 클래스의 컴파일을 허용하지 않습니다.

setNetworkTimeout()는 JDBC 4.1에 도입되었으며 JDBC 4.0에는 없었습니다.

사용하려면 JDBC 4.1이 Java 7과만 함께 제공되었기 때문에 ojdbc7을 원할 것입니다.setNetworkTimeout()방법.

근본적인 문제는 이후 사양의 인터페이스에 메서드를 추가하면 해당 인터페이스의 이전 구현이 오류와 함께 중단될 수 있다는 것입니다.다가오는 Java 8의 새로운 기능 중 하나인 기본 방법은 이것이 약간 덜 문제가 되기를 바랍니다.


소켓 시간 초과를 수정할 수 있는 Oracle용 JDBC 드라이버 속성도 있습니다.

씬 드라이버를 사용하는 경우 다음 Oracle JDBC 속성을 사용하여 소켓 시간 초과를 설정할 수도 있습니다.

Properties props = new Properties();
props.setProperty("user", "dbuser");
props.setProperty("password", "dbpassword");
props.setProperty(OracleConnection.CONNECTION_PROPERTY_THIN_NET_CONNECT_TIMEOUT, "2000");

Connection con = DriverManager.getConnection("<JDBC connection string>", props);

이것은 소프트웨어 진화의 전형적인 사례입니다.JDBC 공급자가 사용 중인 병에서 아직 메소드의 구현을 제공하지 않았습니다.JDBC 라이브러리가 꽤 오래된 것 같으니 최신 라이브러리를 사용해 보십시오.

여기에서 최신 버전을 다운로드하십시오. http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

여기서 이 접근 방식을 사용해 보십시오.

conn.setNetworkTimeout(Executors.newFixedThreadPool(numThreads), yourTimeout);

Oracle 문서에서 "setNetworkTime은 다음과 같은 경우 SQLException을 발생시킵니다. 데이터베이스 액세스 오류가 발생하고, 이 메서드가 닫힌 연결에서 호출되고, 실행자가 NULL인 경우."후자는 당신의 경우처럼 보입니다.

언급URL : https://stackoverflow.com/questions/18822552/setting-network-timeout-for-jdbc-connection

반응형