Tomcat DB 설정

반응형

JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는

데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API다. 

출처 : 위키백과

 

JNDI는 DB Connection을 WAS에서 제어하면서 서버에서 하나의 커넥션 풀을 가진다.

(중요하니까 본명 조 폰트)

 

이 글에서 설명하는 JNDI 예시 환경

JNDI를 설정하기전에 체크

1.자기 환경의 WAS
2.자기 환경의 JDBC 방식
3.자기 환경의 Spring framework 버전 혹은 MVC / Boot

WAS : tomcat 8.5

Spring framework MVC Project : 5.0.3

jdbc 방식 : dbcp

DB : MariaDB 10.2

 

JNDI (Java Naming and Directory Interface) 사용 이유


1. 여러 프로젝트에서 하나의 datasource를 공유해서 사용할 때
2. 실제 프로젝트는 WAS에 올라가 운영되는데
개발/소스를 잘 모르는 운영자가 이해하기 쉽게 하기 위함

3.WAS의 교체에도 신속한 대응이 가능하다.

 

 

 

1.Spring 프로젝트 내부 설정


1-1.root-context.xml 상단 내용 추가 ( jee를 쓰기 위함 )

<xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/jee 
                    http://www.springframework.org/schema/jee/spring-jee.xsd">

 

1-1.root-context.xml 하단 내용 추가

 

기존 JDBC 방식 (변경 전)

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
      <property name="driverClassName" value="com.mariadb.jdbc.Driver" />
      <property name="url" value="jdbc:mariadb//localhost:3306/databaseName" />
      <property name="username" value="dkanro" />
      <property name="password" value="dkanro1" />
</bean>

JDNI 방식 (변경 후)

<jee:jndi-lookup id="dbDataSource"
 jndi-name="jdbc/projectName"
 expected-type="javax.sql.DataSource" />

jndi-name : 자기가 설정하고 싶은 별칭 (하지만 이 이름이 설정 페이지와 동일해야 된다.)

 

1-2.web.xml

<resource-ref>
<description>jndiprojectName</description>
	<res-ref-name>jdbc/projectName</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
</resource-ref>

2.Tomcat 설정

$CATALINA_HOME == 톰캣이 위치한 경로

2-1.server.xml 설정하기

 

$CATALINA_HOME/conf/server.xml 내용 추가

<GlobalNamingResources>
  <Resource auth="Container" driverClassName="org.mariadb.jdbc.Driver" 
  factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" 
  name="jdbc/projectName"  
  type="javax.sql.DataSource" 
  url="jdbc:mariadb://172.10.0.10:3306/databaseName" 
  username="dkanro1" password="dkanro1"/> 
</GlobalNamingResources>

 

톰캣 안에 <GlobalNamingResources> </GlobalNamingResources> 태그는 원래 존재합니다.

직접 만드는 것이 아닙니다.

안에 내용 <Resource ~~..>만 기술하는 것입니다. 

 

 

2-2.context.xml 설정하기

 

$CATALINA_HOME/conf/context.xml 내용 추가

<Context>
   <ResourceLink name="jdbc/projectName" global="jdbc/projectName" type="javax.sql.DataSource"/>
</Context>

 

2-3.mariaDB JDBC.jar 드라이버 파일 추가

 

$CATALINA_HOME/lib 폴더에 mariadb-java-client-1.5.9.jar 파일 추가 ( 버전은 꼭 1.5.9가 아니어도 됩니다. )

mariadb-java-client-1.5.9.jar

3.Tomcat 서비스 재시작

systemctl restart tomcat (서비스 이름은 다 다릅니다.)

 

 


추가 참고사항


※ 자주 뜨는 오류 

원인 : mariadb-java-client-1.5.9.jar 파일이 $CATALINA_HOME/lib 폴더에 존재하지 않는 경우.

해결 : mariadb-java-client-1.5.9.jar를 다운받아 $CATALINA_HOME/lib에 넣은 후 서비스 재시작

The web application [] registered the JDBC driver [org.mariadb.jdbc.Driver] 
but failed to unregister it when the web application was stopped. To prevent a memory leak, 
the JDBC Driver has been forcibly unregistered.

 

※ mariadb-java-client-1.5.9.jar 드라이버 다운로드 주소

https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client/1.5.9

링크 들어가셔서 상단 Files에 jar 버튼 누르시면 다운로드됩니다.

 

※ DB가 다를 경우

driverClass와 url을 변경하시면 됩니다.

//예시 Oracle일 경우
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@172.10.0.10:1521:SID"

※ JDBC 방식이 다를 경우

이 부분을 원하는 JDBC 방식 문법에 맞게 변경하면 됩니다.

<Resource auth="Container" driverClassName="org.mariadb.jdbc.Driver" 
  factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" 
  name="jdbc/projectName"  
  type="javax.sql.DataSource" 
  url="jdbc:mariadb://172.10.0.10:3306/databaseName" 
  username="dkanro1" password="dkanro1"/> 

 

반응형

+ Recent posts