egov 3.7에서 설정파일 분리하기.
1. DB 정보는 WAS 에서만 설정(JNDI 사용)
JNDI 란?
디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다.
tomcat의 server.xml 설정 추가
<GlobalNamingResources>
<Resource name="jdbc/mysqldb"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.0.190:3306/PMSDB?allowMultiQueries=true"
username="IBLeaders"
password="1234"
maxTotal="8"
maxIdle="8"
minIdle="0"
maxWaitMillis="-1"/>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
tomcat의 context.xml 설정 추가
<ResourceLink name="jdbc/mysqldb"
global="jdbc/mysqldb"
auth="Container"
type="javax.sql.DataSource" />
애플리케이션에 DB정보 적용
애플리케이션의 context-datasource.xml 내용 추가
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/mysqldb"/>
</bean>
애플리케이션의 web.xml 내용 추가
<!-- jndi -->
<resource-ref>
<description>PMS DB Connection</description>
<res-ref-name>jdbc/mysqldb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
2.개발 & 운영별 프로퍼티 분리
배포 서버별로 프로퍼티 생성 및 빈 생성
context-local.xml, context-dev.xml, context-prod.xml 생성 및 빈 등록
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd"
profile="dev">
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/egovframework/egovProps/globals-dev.properties</value>
</list>
</property>
</bean>
</beans>
각 xml별로 profile="local", profile="dev", profile="prod" 정의
egov 3.7 버전에서는 아래처럼 하나의 xml 에서 beans 를 여러개 정의하는것이 지원이 안되는거같음
3. 배포서버별 애플리케이션 실행방법
3-1.배포서버별 web.xml 변경
## local: 로컬, dev: 개발, prod: 운영
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
3-2.또는 로컬 실행시 톰켓 Arguments 설정
server- open launch configuration - Arguments
이동
VM arguments에서 -Dspring.profiles.active=dev
구문 추가
3-3.또는 톰켓 실행시 명령어 옵션
./startup.sh -Dspring.profiles.active=dev
참고사항
war로 압축했을때의 프로퍼티들의 경로
4. 만약 하나의 톰켓에서 여러개의 모듈을 실행해야 하는 경우
./startup.sh -Dspring.profiles.active=dev
옵션으로는 실행 해야하는 전체 모듈의 active 프로퍼티가 dev인 경우에만 유효하다. 하나는 release로 또 하나는 prod로 돌려야 하는 경우에 제한된다.
4-1.빌드시 default property 설정
maven 빌드시 default property 를 설정해주면 WAS 명령어./startup.sh
실행시 각 모듈별 디폴트로 선언되어있는 각기다른 프로퍼티로 실행할수 있다.
pom.xml 추가
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>local</id>
<properties>
<env>local</env>
</properties>
</profile>
<profile>
<id>prod</id>
<activation>
<activeByDefault>true</activeByDefault> <!--DEFAULT 선언-->
</activation>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
</plugins>
.
.
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
<webResources>
<webResource>
<directory>${basedir}/src/main/resources/egovframework/egovProps/globals-${environment}.properties</directory>
</webResource>
</webResources>
</configuration>
</plugin>
.
.
.
</plugins>
4-2. MAVEN 빌드 옵션
Run As - Maven build 클릭
clean install -P dev 또는 local 또는 prod
빌드 옵션을 추가하고 빌드를 실행했으면 WAS에서 실행시 빌드옵션으로 추가했던 프로퍼티가 매핑되어 실행된다.
참고자료
https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000015213
https://egovframe.go.kr/home/ntt/nttRead.do?menuNo=37&bbsId=10&nttId=758&menu=2
'SPRING > 스프링' 카테고리의 다른 글
@Transactional에 대한 좋은 이해 (0) | 2024.01.30 |
---|---|
스프링 파라미터 정리 (0) | 2022.09.02 |
스프링 JDK 버전 호환 (0) | 2022.05.31 |
log4j2 설정 기록 (0) | 2022.03.04 |
정리 (0) | 2022.03.03 |