0. JINDI란?
- 네이밍 서비스로 부터 제공하는 데이터 및 객체를 발견하고 참고(Lookup) 하기 위한 자바 API
작성된 응용프로그램에 이름 지정 및 디렉토리 기능을 제공 - WAS단에서 DB Connection 객체를 미리 네이밍 해두는 방식
- DB Conncetion Pool을 효율적으로 사용 가능
- DB Connection을 WAS단에서 제어하면서 서버에서 하나의 Connection Pool을 가진다.
1. 설명
이 프로젝트에서는 MyBatis를 사용하지 않기때문에 JNDI를 이용하여 직접 DB와 연결한다.
Servlet에서 DB연결을 테스트할 수 있는 TestConnection 메소드를 만든다.
2. 초기 세팅
먼저 의존성을 추가해주고, DB를 미리 생성해 둔다.
그 다음 DB연결 정보를 context.xml, web.xml에서 설정한다.
pom.xml
...
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
...
context.xml
...
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username = [Id]
password = [Password]
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/[Database]?useSSL=false&characterEncoding=UTF-8&autoReconnect=true"
/>
...
web.xml
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3. Connection 관리
Connection을 관리해주는 Sqls 클래스를 생성한다.
이후 모든 DB연결은 Sqls의 getConnection을 사용한다.
Sqls.java
public class Sqls {
public static Connection getConnection(){
try {
Context context = new InitialContext();
DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/mysql");
return dataSource.getConnection();
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
4. TestConnection 메소드
Sqls.getConnection을 이용하여 DB와 연결이 정상적으로 되었는지 테스트 해준다.
Connection의 생성은 Try-With-Resouces로 Try문이 끝남과 동시에 닫아지게 처리했다.
ApplicationLoader.java
public class ApplicationLoader implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
...
testConnection();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
private void testConnection(){
try(Connection connection = Sqls.getConnection()){
DatabaseMetaData metaData = connection.getMetaData();
System.out.println(metaData.getDatabaseProductName() + " " + metaData.getDatabaseProductVersion());
}catch (Exception e){
e.printStackTrace();
}
}
}
반응형
'Java > - Pure Java Project' 카테고리의 다른 글
7. LocalThread & Transaction ( Runnable ) (0) | 2023.02.13 |
---|---|
6. Annotation (0) | 2023.02.09 |
4. Router (Dynamic Import & Create Class) (0) | 2023.02.07 |
3. Filter > Controller, Css (0) | 2023.02.06 |
2. Filter > Js (0) | 2023.02.06 |