JDBC Socket Timeout
* WAS와 DBMS 통신시 타임아웃 계층 이해
1. TransactionTimeout
- 어플리케이션에서 트랜잭션으로 묶은 단위의 timeout
- Spring에서 xml이나 @Transactional을 이용해서 설정 할 수 있다
2. StatementTimeout
- query statement 하나당 timeout
- 기본적으로는 JDBC의 java.sql.Statement.setQueryTimeout(int timeout) 메소드로 설정
- ORM에 따른 설정 방법 제공
3. SocketTimeout
- JDBC 드라이버와 DBMS 사이의 socket timeout
- connectTimeout과 socketTimeout 두 가지가 있음
- connectTimeout: socket 연결에 관한 timeout
- socketTimeout: socket read/write 관한 timeout
비고) Transaction은 다수(n개)의 statement를 포함할 수 있기 때문에 n * StatementTimeout + 𝝰 이상으로 잡아줘야 하고, SocketTimeout은 하나의 statement가 끝날때 까지는 유지해 줘야 함으로 StatementTimeout 보다는 크게 잡아 줘야 한다.
위 내용은 출처에서 내가 필요한 내용 위주로 간추린 것인데, 주로 Oracle을 사용하다 보니 이에 대해 Socket Timeout 포커스를 맞춰 적어 보면,
MySQL을 사용할 때는 아래처럼 url query param으로 줬었는데
Oracle의 경우는 oracle.jdbc.ReadTimeout=milliseconds로 설정이 가능한데,
출처: https://d2.naver.com/helloworld/1321
참고: https://docs.oracle.com/cd/E57185_01/ESTUG/apbs02s23.html
1. TransactionTimeout
- 어플리케이션에서 트랜잭션으로 묶은 단위의 timeout
- Spring에서 xml이나 @Transactional을 이용해서 설정 할 수 있다
2. StatementTimeout
- query statement 하나당 timeout
- 기본적으로는 JDBC의 java.sql.Statement.setQueryTimeout(int timeout) 메소드로 설정
- ORM에 따른 설정 방법 제공
3. SocketTimeout
- JDBC 드라이버와 DBMS 사이의 socket timeout
- connectTimeout과 socketTimeout 두 가지가 있음
- connectTimeout: socket 연결에 관한 timeout
- socketTimeout: socket read/write 관한 timeout
비고) Transaction은 다수(n개)의 statement를 포함할 수 있기 때문에 n * StatementTimeout + 𝝰 이상으로 잡아줘야 하고, SocketTimeout은 하나의 statement가 끝날때 까지는 유지해 줘야 함으로 StatementTimeout 보다는 크게 잡아 줘야 한다.
위 내용은 출처에서 내가 필요한 내용 위주로 간추린 것인데, 주로 Oracle을 사용하다 보니 이에 대해 Socket Timeout 포커스를 맞춰 적어 보면,
MySQL을 사용할 때는 아래처럼 url query param으로 줬었는데
jdbc:mysql://xxx.xx.xxx.xxx:3306/database?connectTimeout=60000&socketTimeout=
Oracle의 경우는 oracle.jdbc.ReadTimeout=milliseconds로 설정이 가능한데,
DriverURL로 설정할 수 없고, OracleDatasource.setConnectionProperties() API를 통해 Properties 객체로 전달해야 한다. DBCP사용 시 다음 API를 사용한다.이렇게 해야 한다고 한다. Spring Boot를 사용하면 HikariDataSource 설정시 setDataSourceProperties() 를 통해서 설정해 줄 수 도 있을거 같다.(https://stackoverflow.com/a/59354218/1411827)
BasicDatasource.setConnectionProperties()
BasicDatasource.addConnection
출처: https://d2.naver.com/helloworld/1321
참고: https://docs.oracle.com/cd/E57185_01/ESTUG/apbs02s23.html
댓글
댓글 쓰기