*기본적인 세팅은 아래 글 참조
2022.03.26 - [웹프로그래밍/Servlet & JSP] - [환경설정] Eclipse의 Web Project와 DB(MySQL) 연결하기
위의 글에서 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 |