본문으로 바로가기

egov 3.7 에서 개발/운영/배포 설정파일 분리 운영하기

category SPRING/스프링 2023. 8. 9. 09:51
728x90
반응형
SMALL

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. 배포서버별 애플리케이션 실행방법

A

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에서 실행시 빌드옵션으로 추가했던 프로퍼티가 매핑되어 실행된다.

참고자료

http://bcho.tistory.com/740

https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000015213

https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?pagerOffset=1060&searchKey=&searchValue=&menuNo=69&qaId=QA_00000000000018530

https://egovframe.go.kr/home/ntt/nttRead.do?menuNo=37&bbsId=10&nttId=758&menu=2

728x90
반응형
LIST

'SPRING > 스프링' 카테고리의 다른 글

@Transactional에 대한 좋은 이해  (0) 2024.01.30
스프링 파라미터 정리  (0) 2022.09.02
스프링 JDK 버전 호환  (0) 2022.05.31
log4j2 설정 기록  (0) 2022.03.04
정리  (0) 2022.03.03