Programming/Java

Multithread 환경에서의 JDBC 사용

Lawmin 2011. 11. 2. 11:15
thread 를 이용해 여러개의 connection을 생성해 DB에서 읽어온 데이터를 가지고 작업할 일이 있었으나, jdbc 가 thread-safe 하지 않아서 인지 자꾸 오류가 나는 것이었다.
(분명 다른 connection인데 같은 statement, resultset 를 생성하여, 더이상 읽어온 값이 없다는 오류를 뱉는 둥...)

최대한의 동시성을 유지하면서 무결성이 깨지지 않는 동기화 수준을 정리할 필요성을 느낌...

[Connection] - DriverManager 수준
synchronized(DriverManager.class) {
conn = (Connection)DriverManager.getConnection(jdbcUrl, dbProp); 
}

[Statement, PreparedStatement]
DriverManager 또는 DB처리 객체 인스턴스 수준의 synchronized 필요, 즉, synchronized method
-> 미적용시 서로 다른 connection 인스턴스에서 prepareStatement 및 createStatement 했으나 동일 instance 리턴하는 경우 발생하였음

[ResultSet]
서로 다른 Statement 에서 생성되었다면 multi-thread 관련 issue 없음 (synchronized 불필요)

 시행착오를 통한 결과를 정리해보았으나, 잘못된 결론일 수 있음 OTL