본문 바로가기
Backend/JAVA

Connection Pool 설정하기

by YERIEL_염주둥 2020. 5. 14.
728x90

1. Connection Pool 설정에 필요한 것!

  1.  DBCP 라이브러리
  2. DB Driver 라이브러리
  3. Context 내에 Resource

 

2. DBCP 라이브러리 추가하기

톰켓 폴더 / lib / tomcat-dbcp.jar를 찾아서 프로젝트 내 WEB-INF/lib 폴더에 붙여넣기!

 

3. DB Driver 라이브러리 추가하기

본인이 사용하는 DB 홈페이지에서 사용하는 언어에 맞는 DB Driver 다운받기

yeriel은 20200514 현재 JAVA 언어로 MySQL을 사용하고 있다.

사용하는 언어 버전에 맞춰서 다운받아서 압축을 풀고

mysql-connector-java-5.1.48.jar 파일을 복사해서 프로젝트 내 WEB-INF/lib 폴더에 붙여넣기!

 

4. Context 내에 Resource 추가하기

방법 1. Server.xml 이나 context.xml의 context 내에 resource 추가한다.

방법 2. 프로젝트내의 META-INF에 context.xml을 생성 한 후 context 내에 resource 추가하기

 

 

<?xml version="1.0" encoding="UTF-8"?>
<context> 

	<!-- 
	Resource를 등록하여 웹에서 JNDI로 호출할 이름과 정보를 설정. 
	각 db의 Driver jar 필요
	mariadb : org.mariadb.jdbc.Driver // jdbc:mariadb
	mysql : org.gjt.mm.mysql.Driver // jdbc:mysql
	
	-->
	<Resource 
  	name="jdbc/myCon" 
  	auth="Container" 
  	type="javax.sql.DataSource"
	factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
	driverClassName="com.mysql.jdbc.Driver"
	url="jdbc:mysql://localhost:3306/ksmart35db?autoReconnect=true&amp;characterEncoding=UTF-8"
	username="root" 
	password="java0000" 
	maxActive="100" 
	maxIdle="30" 
	maxWait="10000"
	removeAbandoned="true" 
	removeAbandonedTimeout="60"/> 


  	<!-- 
	1. name : JNDI로 호출될 이름을 설정- 수정해서 바꿀수 있음
	2. auth : DBCP를 관리할 관리자 (Container or Application)
	3. type : 해당 resource의 return type  - 이 api에서 읽겠다
	4. factory : dbcp를 유용하는 관리 클래스
	5. driverClassName : JDBC를 이용하기 위한 드라이버 클래스 드라이버 네임 스페이스
	6. url : DB의 접속 URL
	7. username : DB의 계정 명
	8. password : 계정에 대한 비밀번호
	9. maxActive : 최대 접속 허용 개수
	10. maxIdle : DB Pool에 여분으로 남겨질 최대 Connection 개수
	11. maxWait : DB 연결이 반환되는 Timeout의 최대 시간 (-1은 무한 대기)
	12. removeAbandoned : Connection이 잘못 관리되어 버려진 연결을 찾아 재활용할 것인지의 여부 설정
	13. removeAbandonedTimeout : 버려진 연결로 인식할 기본 시간 설정
	(초 단위로 해당 시간이 지나면 버려진 연결로 인식한다.)
	-->	  	

</context>

 

 

준비 끝

 

DB 호출하기

 

kr.or.ksmart.dbConnetion.DbConnetion.java

package kr.or.ksmart.dbConnetion;

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 DbConnetion {
	public static Connection getConnetion() {
		Connection conn = null;
		try {
			Context context = new InitialContext();
			DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/myCon");
			conn = ds.getConnection();
		}catch (SQLException e) {
			e.printStackTrace();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		return conn;
		
	}
}

 

kr.or.ksmart.test.Example.java

package kr.or.ksmart.test;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.or.ksmart.dbConnetion.DbConnetion;

@WebServlet("/Example")
public class Example extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public Example() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection conn = DbConnetion.getConnetion();
		PreparedStatement ps =null;
		ResultSet rs = null;
		try {
			ps = conn.prepareStatement("SELECT g.g_name, g.g_price FROM tb_goods AS g WHERE g_code = 'goods_3'");
			rs = ps.executeQuery();
			if(rs.next()) {
				System.out.println(rs.getString("g_name"));
				System.out.println(rs.getString("g_price"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if(rs != null)	rs.close();
				if(ps != null) ps.close();
				if(conn != null) conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

		protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

요래 호출하기

반응형

댓글