커넥션 풀(Connection Pool)
DB 작업 때문에 매번 웹 서버가 Connection 객체를 생성하면 시스템 성능에 영향이 큼
-> Connection 객체를 미리 생성해 pool에 넣어놓고,
요청이 있을 때 이미 생서된 Connection객체를 가져다 사용
커넥션 풀 설정
톰캣 홈 디렉토리 / conf 안에
server.xml, context.xml 파일에 해당 내용 추가
--server.xml 변경 사항
<Resource auth="Container"
driverClassName="oracle.jdbc.OracleDriver"
type="javax.sql.DataSource"
initialSize="0"
minIdle="5"
maxTotal="20"
maxIdle="20"
maxWaitMillis="5000"
url="jdbc:oracle:thin:@localhost:1521:xe"
name="dbcp_myoracle"
username="계정아이디"
password="계정비밀번호" />
--context.xml 변경 사항
<ResourceLink global="dbcp_myoracle" name="dbcp_myoracle"
type="javax.sql.DataSource"/>
파일을 수정했으면 톰캣 웹 서버를 다시 생성하기!!
커넥션 풀 동작 검증
public Connection con;
public Statement stmt;
public PreparedStatement psmt;
public ResultSet rs;
// 기본 생성자
public DBConnPool() {
try {
// 커넥션 풀(DataSource) 얻기
Context initCtx = new InitialContext();
Context ctx = (Context)initCtx.lookup("java:comp/env");
DataSource source = (DataSource)ctx.lookup("dbcp_myoracle");
// 커넥션 풀을 통해 연결 얻기
con = source.getConnection();
System.out.println("DB 커넥션 풀 연결 성공");
}
catch (Exception e) {
System.out.println("DB 커넥션 풀 연결 실패");
e.printStackTrace();
}
}
// 연결 해제(자원 반납)
public void close() {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (psmt != null) psmt.close();
if (con != null) con.close(); // 자동으로 커넥션 풀로 반납됨
System.out.println("DB 커넥션 풀 자원 반납");
}
catch (Exception e) {
e.printStackTrace();
}
}
커넥션 풀 테스트