Data Base Connection Pool(DBCP)

Jaden·2022년 10월 30일
0

TIL

목록 보기
1/9

✨DBCP사용이유✨


JDBC를 통하여 DB에 연결하기 위해서는 매번 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 비효율적임


<기존코드>

//Oracle DB에 연결하고 select, insert, update, delete작업을 실행하는 클래스
Public class MemberDAO{

//오라클에 접속하는 소스를 작성
String id = "system"; //접속아이디
String pass = "123456"; //접속비밀번호
String url = "jdbc:oracle:thin:@localhost:1521:XE"; //접속url

Connection con; //데이터베이스에 접근할 수 있도록 설정
PreparedStatement pstmt; //데이터베이스에서 쿼리를 실행시켜주는 객체
ResultSet rs; //데이터베이스의 테이블의 결과를 리턴받아 자바에 저장해주는 객체

//데이터베이스에 접근할 수 있또록 도와주는 메소드
public void getCon(){
	try{
    //1.해당 데이터 베이스를 사용한다고 선언(클래스를 등록=오라클을 사용)
    Class.forName("oracle.jdbc.driver.OracleDriver");
    
    //2.해당 데이터 베이스에 접속
	con = DriverManager.getConenction(url, id, pass);
    } catch(Exception e) {
    	//TODO : handle exception
	}
}

✨DBCP사용✨


DB와 연결된 커넥션 객체를 미리 풀(pool)에 생성해놓고 필요할 때 가져다 쓰고 반환


<커넥션 풀 사용 코드>

1.server.xml - source탭 - 연결을 원하는 프로젝트의 태그안에 코드 입력하여 커넥션풀 세팅

<Context docBase="DataBase" path="/DataBase" reloadable= "true" 
    	source="org.eclipse.jst.jee.server:DataBase">
    <Resource name ="jdbc/pool" auth="Container" type="javax.sql.DataSource" 
   		driverClassName ="oracle.jdbc.driver.OracleDriver" loginTimeout="10" 
 		maxWait="5000" username="system"  password="123456" 
        url="jdbc:oracle:thin:@localhost:1521:xe"/>
</Context>	

2.DAO클래스에서 커넥션 풀을 이용하여 DB에 접근

Public class MemberDAO{

Connection con; //데이터베이스에 접근할 수 있도록 설정
PreparedStatement pstmt; //데이터베이스에서 쿼리를 실행시켜주는 객체
ResultSet rs; //데이터베이스의 테이블의 결과를 리턴받아 자바에 저장해주는 객체

//데이터베이스에 접근할 수 있또록 도와주는 메소드
public void getCon(){
	
  //커넥션 풀을 이용하여 데이터 베이스에 접근
  try {
  		//외부에서 데이터를 읽어들여야 하기에
  		Context initctx = new InitialContext();
  		
  		//톰캣 서버에 정보를 담아놓은 곳으로 이동
  		Context envctx = initctx.lookup("java:comp/env");
  		
  		//데이터 소스 객체를 선언
  		DataSource ds = envctx.lookup("jdbc/pool");
  		
  		//데이터 소스를 기준으로 커넥션을 연결
  		con = ds.getConnection();
  	} catch (Exception e) {
		e.printStackTrace();  
	}  
profile
Quadrilingual Programmer

0개의 댓글