Profile 설정과 Quarts Cron Expression 처리

2015. 12. 15. 13:46Java/Spring Framework

상황은... L4 스위치를 기준으로 2대의 서버에 서비스가 구동중입니다.
그전에, 테스트 서버와 라이브 서버1, 라이브 서버2 이런 형태로 서비스가 되어야 하는 것입니다.

live1,2의 소스상에는 Quart 스케줄러를 설정이 들어 있는데,
live1대만 Quarts Cron Trigger가 돌아야 하고 나머지는 작동이 되면 안되는 구조로 만들어야 하는 거죠..

우선 Profile 설정으로 TEST 와 LIVE , LIVE2 로 나눠서 관리를 합니다.
그렇게 되면, properties 파일을 분기해서 관리하니... 
Git 버전관리 중에 Branch 를 서비스 별로 할 필요가 없었습니다.

그럼 Pom 설정에서 프로파일  분기하는 것 부터 설명 합니다.

A) properties는 아래 resource 형태로 분기

src/main/resources-dev/
src/main/resources-live1/
src/main/resources-live2/

B) pom.xml 설정 에 profiles 추가

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
        </profile>
        <profile>
            <id>live1</id>
            <properties>
                <env>live1</env>
            </properties>
        </profile>
        <profile>
            <id>live2</id>
            <properties>
                <env>live2</env>
            </properties>
        </profile>
    </profiles>


        <!-- profile -->
        <resources>
            <resource>
                <directory>src/main/resources/</directory>
            </resource>
            <resource>
                <directory>src/main/resources-${env}/</directory>
            </resource>
        </resources>



C) 이번에는 프로파일별로 빌드 하는 것은 아래와 같이 하면 됩니다.

clean install -P dev
clean install -P live1
clean install -P live2



자~ 이번에는 Quarts 설정 입니다.
http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-06


간단한 구조로 했습니다.

<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
    <property name="triggers">
        <list>
            <ref bean="aTrigger" />
            <ref bean="bTrigger" />
            <ref bean="cTrigger" />
        </list>
    </property>
</bean>

3개의 Trigger가 동작하겠네요.


<bean id="aTriggerclass="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="a" />
    <property name="cronExpression" value="${schedule.aTrigger}" />
    <!--<property name="cronExpression" value="0 0/1 * * * ?" />-->
</bean>

${schduler.aTrigger} 는 properties 파일에서 빼 놓은 것을 사용 하겠습니다.
그 이유는 live1 서버는 해당 Cron Expression 을 정상적으로 동작하게 해 놨고, 

schedule.aTrigger=0 0 0 5/5 * ?

live2 서버는 해당 Cron Expression 을 동작을 아예 하지 않도록 엉뚱한 값을 설정 해 놨습니다.
하지만 너무 엉뚱한 값을 설정해 버리면, 동작을 안하는 것은 둘째 치고, 웹 서버 구동 자체가 안되는 문제가 있어서, 여러 곳에서 찾았고
결과적으로 아래의 값으로 설정을 했습니다. 
http://stackoverflow.com/questions/13835221/quartz-cron-expression-that-will-never-execute

schedule.aTrigger=59 59 23 31 12 ? 2099

2099년 12월 31일 23시 59분 59초에는 돌아가겠지만... 그때까지 우리가 살아 있진 않겠죠?
ㅎㅎㅎ

이상입니다.