Programming/Servlet & JSP

[환경설정] Eclipse의 Web Project와 DB(MySQL) 연결하기2

코딩하는 포메라니안 2022. 3. 28. 22:56

*기본적인 세팅은 아래 글 참조

2022.03.26 - [웹프로그래밍/Servlet & JSP] - [환경설정] Eclipse의 Web Project와 DB(MySQL) 연결하기

 

[환경설정] Eclipse의 Web Project와 DB(MySQL) 연결하기

1. DB(MySQL)-connector 설치 및 등록 1. mysql-connector 설치 - mysql에서 각 언어마다 연결해주는 connector를 제공하고 있으니, 가져다 쓰자! https://mvnrepository.com/artifact/mysql/mysql-connector-java..

yerinpy73.tistory.com

 

 


 

위의 글에서 DBUtil.java는 DB의 데이터를 접근할 때마다 새로운 연결을 맺고 끊고를 반복하기 때문에, 시간이 오래 걸린다. 요청을 받으면 이제 생성을 시작하고, 다 생성하면 준다고 정리할 수 있다. (주문이 들어오면 제작을 시작하고, 다 제작하면 주는 것)

 

 

이번 글에서는 실행하려고 대기 중인 연결들이 있는 Pool에서 빌려 쓰고 반납하는 형태를 통해 더 효율적인 DB 사용을 해보고자 한다. 미리 만들어 놓고, 요청이 들어오면 바로주기 때문에 처리가 빠르다. (재고를 쌓아두고, 주문들어오면 바로 주는 것)

 

 

 

 

 

1. 연결할 DB와 Pool에 대한 정보 등록

 

코드 의미

- 자원을 등록하겠다!

- 이름은 "jdbc/test"이고, 데이터 형태는 sql이다.

- 최대 100개를 동시에 빌려 쓸 수 있고, 접속하기 위한 아이디는 mysqlID이고 비밀번호는 mysqlPass이다.

- url = 사용할 database

 

<Context>
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" maxTotal="100" 
maxIdle="30" maxWaitMillis="10000" username="mysqlID" password="mysqlPass" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/사용할db이름?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8"/>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

 

 

 

2. DB pool 위치를 찾아서 사용하기

java:comp/evn는 Java EE(프로젝트)에 등록된 소스 정보를 찾을 수 있는 트리의 root라고 생각하면 된다.

root의 위치를 찾고, 거기서 db pool의 위치를 찾는다.

 

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 DBUtil {
	
	private static DBUtil instance = new DBUtil();
	public static DBUtil getInstance() {
		return instance;
	}
	
	//Tomcat이 미리연결해놓으면, 빼서 쓰자
	public Connection getConnection() throws SQLException {
		try {
			Context context = new InitialContext();
			Context rootContext = (Context)context.lookup("java:comp/env");//object return
			DataSource dataSource = (DataSource)rootContext.lookup("jdbc/test");
			return dataSource.getConnection();
		} catch (NamingException e) {
			e.printStackTrace();
		}//탐색기를 열었다
		return null;
	}
	
	public void close(AutoCloseable... closeables) {
		for (AutoCloseable c : closeables) {
			if (c != null) {
				try {
					c.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}
}

 

'Programming > Servlet & JSP' 카테고리의 다른 글

Servlet & JSP (5) - Error Page 처리  (0) 2022.04.03
JSP (4) - JSTL  (0) 2022.03.27
JSP (3) - EL  (0) 2022.03.27
Servlet & JSP (4) - Cookie와 Session  (0) 2022.03.27
Servlet & JSP (3) - MVC 패턴  (0) 2022.03.27