본문 바로가기

프로그래밍/JAVA

java - DB Connection Pool을 JSP에서 쓰기

반응형


======================================================
DB Connection Pool 이란


보통의 경우는 DB에 연결을 하고 결과를 가져온 후에 끊어 버립니다.

시간도 많이 걸리고 퍼포먼스도 많이 잡아 먹죵..

그러나 DB Connection Pool 이라는 것은 DB Connection Pool 매니저가 일정의 컨넥션을 연결하고 있다가.

요청이 들어오면 컨넥션을 할당을 해주고 없으면 기다리게 합니다.

요청한 클라이언트는 컨넥션을 다쓰면 다시 반납하는 구조입니다.

속도면이나 퍼포먼스 부분에서 조금은 향상을 바랄수 있을 것입니다.
======================================================

 


우선 소스 먼저..

< 소스가 지저분해서 죄송합니다. 예전에 테스트 하던거 수정하여서 테스트하였습니다. >


소스
------------------------------------------------------------------- -----

<%@ page language="java" import="java.sql.*,DBConnectionManager" %>


<%-- DBConnectionManager의 초기화 --%>
<%!
private DBConnectionManager connMgr;
%>

 


<%-- 하나의 DBConnectionManager의 인스턴스 얻기 --%>
<%!
public void jspInit()
{
 connMgr = DBConnectionManager.getInstance();
}
%>


<%
 // 컨넥션 풀에서 컨넥션 하나 얻기
 Connection con = connMgr.getConnection("test");
 
 
 try {
 Statement stmt = con.createStatement();
 ResultSet rs = stmt.executeQuery("select id, name FROM customer");
 
%>

 

<html>
<body>

<br>

<table border=1 cellspacing=0 width=300>
<tr>
<td align=center bgcolor=gray>
ID
</td>

<td align=center bgcolor=gray>
NAME
</td>
</tr>

<%
 while(rs.next()) {
 String id= rs.getString(1);
 String name = rs.getString(2);
%>
<tr>

<td align=center>
<%=id %>
</td>

<td align=center>
<%= name %>
</td>

</tr>

<%
 }
%>

</table>
</body>
</html>

<%

 stmt.close();
 
 } catch (java.sql.SQLException e) {
 System.out.println(e);
 } catch (java.io.UnsupportedEncodingException e) {
 System.out.println(e);
 } finally
 {
 //컨넥션 풀에서 얻은 컨넥션 반납
 connMgr.freeConnection("test", con);
 }
 
%>

 

<%-- 하나의 DBConnectionManager의 인스턴스 반납 --%>
<%!
public void jspDestroy()
{

connMgr.release();

}
%>
-------------------------------------------------------------------- ---

위에 소스로 성공하였습니다.

그리고 자료실에 DBConnectionManager.java 화일을 올려두었으니 받으세요..

그리고 Bean 디렉토리에 넣고 컴파일 하세요..

그리고 같은 디렉토리 안에..


db.properties 파일을 넣어 두어야 합니다.

이 화일은 이런 것을 적어 주어야 합니다.

-------------------------------------------------------------------
drivers 공백으로 분리된 JDBC driver 이름의 리스트
logfile 로그파일의 절대위치

<poolname>.url 데이타베이스 연결을 위한 JDBC URL
<poolname>.maxconn 가능한 최대 연결 갯수. 0 는 제한 없음을 의미.
<poolname>.user 풀에 사용할 사용자 이름
<poolname>.password 사용자가 쓰는 패스워드
-------------------------------------------------------------------

 

예제)
-------------------------------------------------------------------
drivers=org.gjt.mm.mysql.Driver
logfile=c:tomcat2binlogsDBConnectionManager_log.txt

test.url=jdbc:mysql://203.237.xx.xx:3306/test
test.maxconn=10
test.user=xxxx
test.password=xxxx
-------------------------------------------------------------------

 

위에 소스에 대해 설명 드리겠습니다. 제가 추가한 것은...

<%@ page language="java" import="java.sql.*,DBConnectionManager" %>

우선 DBConnectionManager 을 import 하였구엽..

 

--------------------------------------------------
<%-- DBConnectionManager의 초기화 --%>
<%!
private DBConnectionManager connMgr;
%>
--------------------------------------------------
둘째로, DBConnectionManager의 초기화 하였구엽

 

--------------------------------------------------
<%-- DBConnectionManager의 인스턴스 얻기 --%>
<%!
public void jspInit()
{
 connMgr = DBConnectionManager.getInstance();
}
%>
--------------------------------------------------
셋째로, jspInit()로 DBConnectionManager의 인스턴스를 얻었습니다.

 

--------------------------------------------------
 // 컨넥션 풀에서 컨넥션 하나 얻기
 Connection con = connMgr.getConnection("test");
--------------------------------------------------
넷째로, 컨넥션을 얻었습니다.


--------------------------------------------------
 //컨넥션 풀에서 얻은 컨넥션 반납
 connMgr.freeConnection("test", con);
--------------------------------------------------
다섯째로, DB의 사용이 끝나고 컨넥션을 반납합니다.

참고로 Java.WebPD다방의 주인장님이 말씀하신데로..

finally로 처리하여 꼭 컨넥션을 반납하도로 하였습니다.

 


--------------------------------------------------
<%-- 하나의 DBConnectionManager의 인스턴스 반납 --%>
<%!
public void jspDestroy()
{
connMgr.release();
}
%>
--------------------------------------------------
여섯째로 다쓴 DBConnectionManager의 인스턴스 반납하기

 


이번에는 Java.WebPD다방님이 말씀하신데로 했으니 맞게쭁...


그냥 로그 적어 봅니다.

--------------------------------------------------------------------- -----
Fri May 05 02:33:32 GMT+09:00 2000: Registered JDBC driver org.gjt.mm.mysql.Driver
Fri May 05 02:33:32 GMT+09:00 2000: Initialized pool test
Fri May 05 02:33:33 GMT+09:00 2000: Created a new connection in pool test
Fri May 05 02:33:55 GMT+09:00 2000: Registered JDBC driver org.gjt.mm.mysql.Driver
Fri May 05 02:33:55 GMT+09:00 2000: Initialized pool test
Fri May 05 02:33:55 GMT+09:00 2000: Created a new connection in pool test

---------------------------------------------------------------------- ----

반응형