장점
- 하나의 Tomcat 안에 여러 Application이 있을 경우, 하나의 DataSource를 공유할 수 있다.
- WAS에 설정을 함으로써 관리자가 관리하는데 용이하다.
Tomcat 설정 (PostgreSQL 기준)
01. Server.xml
<GlobalNamingResources>
<Resource
name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/dbtest"
username="testuser"
password="1234"
maxTotal="30"
maxIdle="30"
maxWaitMillis="3000"
minIdle="10"
testWhileIdle="true"
validationQuery="select 1"
closeMethod="close" />
</GlobalNamingResources>
02. Context.xml
<context>
<ResourceLink name="jdbc/TestDB" global="jdbc/TestDB" type="javax.sql.DataSource" />
</context>
03. web.xml
<resource-ref>
<description></description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Resource
- name : JNDI 이름. Context의 lookup()을 사용하여 자원을 찾을 때 사용.
- auth : resource manager 에 sign on 하는 주체로 Container (container-managed 일 경우) 혹은 Application (application-managed 일 경우)
- type : Resource의 형태를 지정. (패키지 이름 포함한 클래스 이름)
- driverClassName : JDBC 드라이버 클래스 지정 (패키지 이름 포함)
- url : DB connection URL
- username : DB접속 계정
- password : DB접속 암호
- maxActive : DataSource로 부터 꺼낼 수 있는 connection 최대 수. (기본값 8)
- maxIdle : DataSource에서 Connection pool 유지될 수 있는 사용하지 않는(대기) connection 최대 개수. 최대 개수 초과 시 반납되는 connection은 닫힘. (기본갑 8)
- maxWait : 발급한 connection 개수가 최대값에 도달한 상태에서 다시 connection을 요청할 경우 준비하기 위한 최대 대기시간(milliseconds). 최대 대기시간이 지나도 반납되는 connection이 없으면 예외를 던진다. (기본값 -1, 커넥션 반납 무한대기)
- minIdle : maxActive 를 넘을 수 없으므로 때에 따라 idle connection 이 minIdle 보다 적을 수도 있고, -1 일 경우 무제한이며, default 는 0
- testWhileIdle : idle connection 대상으로 validationQuery를 수행하여 문제가 발생할 경우 pool 에서 제거한다. 그리고 그 주기는 timeBetweenEvictionRunsMillis인데 물론 validationQuery 가 우선한다.
- validationQuery : connection 유효성 체크 query 로 default 는 null 이다. 만일 MySQL/MariaDB/PPAS/PostgreSQL 에 적용하려면 select 1, Oracle 에 적용하려면 select 1 from dual 을 사용한다.
- closeMethod : Tomcat Server가 종료될 때, 자원 해제를 위해서 호출하는 메서드. (매개변수는 없어야 함.)
JNDI (Java Naming and Directory Interface API)
- Directory Service에서 제공하는 데이터 객체를 발견하고 참고(lookup) 하기 위한 JAVA API.
(외부객체를 가져오기위한기술)
- Application은 JNDI를 사용하여 Server의 Resource(다른 시스템과의 연결을 제공하는 객체)를 찾을 수 있다.
- Resource를 Server에 등록할 때 고유한 JNDI를 부여한다. 보통 사용자에게 친숙한 directory 경로 형태이며, 예를 들면 JDBC 자원에 대한 JNDI 이름은 "jdbc/testdb" 형식으로 지어진다.
- Tomcat와 같은 WAS를 보면 특정 폴더에 필요한 데이터 소스(라이브러리)를 사용하기위해 JNDI를 이용하여 가져온다.
Reference
https://all-record.tistory.com/104
https://sarc.io/index.php/tomcat/21-tomcat-datasource
'SPRING' 카테고리의 다른 글
[SPRING] ResponseEntity (1) | 2019.07.05 |
---|---|
[SPRING] RestTemplate (0) | 2019.07.04 |
[SPRING] Task Scheduler 설정 및 사용방법 (0) | 2019.07.02 |
[SPRING] 파일업로드 (0) | 2019.03.06 |
댓글