다연이네

[days07] 커넥션 풀 (Connection Pool) 본문

JSP

[days07] 커넥션 풀 (Connection Pool)

 다연  2021. 1. 4. 19:05
반응형

 커넥션 풀(Connection Pool) 


1. Connection 객체를 미리 풀(pool) 속에 생성해 두고 가져다 사용하고 다시 반환하는 기법
2. 톰캣 (WAS)이 제공하는 DBCP를 사용하는 방법

3. 설정
ㄱ. WEB-INF > lib  tomcat-dbcp.jar 추가  (jar파일 위치 : 나는 c드라이브 apache-tomcat 속 lib 속에 존재)

ㄴ. http://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&_10g 

<Resource  
name="jdbc/myoracle"  
auth="Container" 
            type="javax.sql.DataSource"  
            driverClassName="oracle.jdbc.OracleDriver" 
            url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"

            username="scott"  
            password="tiger"  
            maxTotal="20"  풀이 관리하는 커넥션 객체의 최대 갯수 설정 (설정안하면8) 
            maxIdle="10" 풀이 보관할 수 있는 최대 유휴(접속자 없어도 10개는 만들어 두겠다) 갯수 설정 (설정안하면8) 
            minIdle="0" 풀이 유지할 최소 유휴 커넥션 갯수 
            maxWaitMillis="-1" 최대 대기 시간 설정 속성 (음수 :커넥션 객체를 얻어갈 때까지 무한정 기다리게 함) 
            blockWhenExhausted(boolean) 풀이 관리하는 커넥션 객체가 모두 사용중인 상태에 
                                        커넥션 객체를 요청할 때 true로 설정시 기다리게 하고 
                                       false로 설정시 NoSuchElementException 예외 발생시키는 속성 
/>

ㄷ. META-INF 폴더 > context.xml 파일 추가

위 코드를 <Context>로 묶고 url 뒤에 mysid를 xe로 수정했다.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<Resource 
              name="jdbc/myoracle" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
              username="scott" 
              password="tiger" 
              maxTotal="20" 
              maxIdle="10"
              maxWaitMillis="-1"/>
</Context>

ㄹ. web.xml

<resource-ref>
	 <description>Oracle Datasource example</description>
	 <res-ref-name>jdbc/myoracle</res-ref-name>
	 <res-type>javax.sql.DataSource</res-type>
	 <res-auth>Container</res-auth>
  </resource-ref>

ㅁ. Connection con = DBConn.java - getConnection() 안쓰고 앞으로
     com.util.ConnectionProvider 클래스 추가

 

 

 

 

<%@page import="javax.naming.InitialContext"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.Context"%>

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>

 <%
 Context initContext = new InitialContext();
 Context envContext  = (Context)initContext.lookup("java:/comp/env");
 DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
 Connection conn = ds.getConnection();
 %>
 
 conn=<%=conn %>
 <%
 conn.close(); //커넥션 풀에 반환 (닫는거x)
 %>
</body>
</html>

 

ConnectionProvider.java

ConnectionProvider 클래스를 하나 만들어두자 (자주 사용할 것이기 때문에)

package com.util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionProvider {

	public static Connection getConnection() 
			throws NamingException, SQLException {
	
		 Context initContext = new InitialContext();
		 Context envContext  = (Context)initContext.lookup("java:/comp/env");
		 DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
		 Connection conn = ds.getConnection();
		 
		 return conn;
	}//
	
}//

 

앞으로 이렇게 사용하자

<%@page import="java.sql.Connection"%>
<%@page import="com.util.ConnectionProvider"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="">
<style>
</style>
<script>
   $(document).ready(function (){     
   });
</script>
</head>
<body>

<%
   Connection con = ConnectionProvider.getConnection(); //이제 이렇게 가져올 것
%>
con = <%= con %>
<%
   con.close();
%>
</body>
</html>

반응형
Comments