상황
WAS에 데이터베이스 정보를 설정하고 연결하는 방식으로 개발해달라는 요청이 들어왔다.
이번 기회를 통해 tomcat에 JNDI 설정을 하는 방법을 정리해보았다.
실행환경 및 버전
- OS : Ubuntu 20.04.3 LTS
- build tool : Gradle
- IDE : Intellij 유료버전
- JDK : open JDK 11
- Spring Boot : 2.7.9
- Tomcat : 9.0.71
✔️1. 먼저 external tomcat에서 war 로 빌드 가능한 환경 세팅하기
📌 이 게시글은 외장 톰캣에 war로 빌드하여 배포하는 환경이 갖추어져 있다는 전제하에 진행되므로,
아래 포스팅을 참고하여 미리 세팅이 갖추어져 있는지 확인 바란다.
2023.10.11 - [Back/Spring Boot] - [SpringBoot] war로 배포하기, 외장 톰캣 구동 (+Trouble Shooting)
[application 소스에서 적용할 부분]
✔️2. properties 파일에 jndi 적용
📌jndi방식이 아닌 JDBC 방식은 이런식으로 설정해둘 것이다.
# 데이터베이스 연결 및 설정
spring:
datasource:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url:
username:
password:
📌jndi방식은 이렇게 jndi-name 을 명시해준다.
spring:
datasource:
jndi-name: java:comp/env/jdbc/j4s
jndi-name은 tomcat의 설정파일과 java source를 연결시켜주는 연결고리 같은 역할을 한다고 보면 된다.
이렇게 명시하면 server.xml에서 jndi/j4s 로 지정한 datasource를 바라본다.
주의할 점은 springboot 설정을 할 때는 jndi-name 에 java:comp/env/ 를 tomcat 설정파일에 쓰일 name 앞에 추가해 줘야 한다.
이제 tomcat 설정을 건들여보자!
[tomcat 설정파일에서 적용할 부분]
✔️3. server.xml
📌톰캣의 conf/server.xml 을 vi 편집기로 열어 아래와 같이 추가한다.
공백으로 둔 부분은 자신의 프로젝트 DB설정에 따라 적절히 명시해준다.
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<!-- 추가한 부분 시작 -->
<Resource auth="Container"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
name="jdbc/j4s"
password=""
username=""
type="javax.sql.DataSource"
url=""/>
<!-- 추가한 부분 끝 -->
</GlobalNamingResources>
✔️4. context.xml
📌 톰캣의 conf/context.xml 을 vi 편집기로 열어 아래와 같이 추가한다. (name, global 부분도 잘 맞춰서 명시하기!)
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- 추가한 부분 시작 -->
<ResourceLink auth="Container" name="jdbc/j4s" global="jdbc/j4s" type="javax.sql.DataSource" />
<!-- 추가한 부분 끝 -->
</Context>
✔️5. war 파일 배포 후 서비스 시작해보기
📌 이제 설정은 마쳤으니, 프로젝트를 war로 패키징하여 설정해둔 톰캣 위에서 배포해보자!
그리고 startup.sh 명령어를 통해 실행하여 DB연결이 잘 되면 성공한 것이다.
'Back > Spring Boot' 카테고리의 다른 글
@RequestBody DTO json데이터가 null일 때 (3) | 2024.02.07 |
---|---|
[SpringBoot, Tomcat] Tomcat JNDI DB 정보 암호화 (0) | 2023.10.24 |
[SpringBoot] war로 배포하기, 외장 톰캣 구동 (+Trouble Shooting) (1) | 2023.10.11 |
[Gradle] biuld.gradle 살펴보기 (0) | 2023.09.05 |
[SpringBoot] @Valid 어노테이션으로 collection 객체 검증 (0) | 2023.01.30 |
댓글