JDBC 사용을위한 표준 코드 섹션은 다음과 같습니다.
Connection conn = getConnection(...);
Statement stmt = conn.conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rset = stmt.executeQuery (sqlQuery);
// do stuff with rset
rset.close(); stmt.close(); conn.close();
질문 1 : Connection Pool을 사용할 때 마지막에 Connection을 닫아야합니까? 그렇다면 풀링의 목적이 상실되지 않습니까? 그렇지 않은 경우 DataSource는 Connection의 특정 인스턴스가 해제되고 재사용 될 수있는시기를 어떻게 알 수 있습니까? 나는 이것에 대해 약간 혼란 스럽습니다.
질문 2 : 다음 방법이 표준에 가깝습니까? 풀에서 연결을 얻으려는 시도처럼 보이며 DataSource를 설정할 수없는 경우 구식 DriverManager를 사용하십시오. 런타임에 어떤 부분이 실행되고 있는지조차 확실하지 않습니다. 위의 질문을 반복하면 그러한 방법에서 나오는 연결을 닫아야합니까?
고마워요-MS.
synchronized public Connection getConnection (boolean pooledConnection)
throws SQLException {
if (pooledConnection) {
if (ds == null) {
try {
Context envCtx = (Context)
new InitialContext().lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/NamedInTomcat");
return ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
}}
return (ds == null) ? getConnection (false) : ds.getConnection();
}
return DriverManager.getConnection(
"jdbc:mysql://"+ipaddy+":"+dbPort +"/" + dbName, uName, pWord);
}
편집 : 스택 추적이 보이지 않기 때문에 풀링 된 연결을 얻고 있다고 생각합니다.