본문으로 바로가기

목차

    0. 환경

    • windows10
    • openjdk version "1.8.0_242"
    • STS4 TooL (이클립스) 
    • Spring Framework 4.3.8 released
    • Spring MVC Project (Legacy Project) 

    1. maven 추가 (pom.xml)

    • quartz
    • spring-context-support
    <!-- quartz 라이브러러리 -->
    <dependency>
    	<groupId>org.quartz-scheduler</groupId>
    	<artifactId>quartz</artifactId>
    	<version>2.3.0</version>
    </dependency>
    
    <!-- 스프링 Quartz 도우미 라이브러리 -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-context-support</artifactId>
    	<version>4.3.4.RELEASE</version>
    </dependency>

    2. 서비스 생성

    Spring Quartz를 이용해 주기적으로 실행할 서비스를 생성합니다.

     

    [인터페이스]

    package com.test.quartz;
    
    public interface TestQuartzService {
    
    	void testMethod();
    }​

     

    [구현 클래스]

    @Service("testQuartzJob") 어노테이션을 꼭 작성해줍니다.

    package com.test.quartz;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.test.service.TestService;
    
    @Service("testQuartzJob")
    public class TestQuartzServiceImpl implements TestQuartzService{
    
    	private static final Logger logger = LoggerFactory.getLogger(TestQuartzService.class);
    	
    	@Override
    	public void testMethod() {
    		
    		logger.info("test");
    	}
    
    }

    3. 스케쥴러 등록

    • root-context.xml에 Job, Trigger, Scheduler를 등록합니다.
    • Cron Expression을 이용해 다양하게 실행 시간을 설정할 수 있습니다.
    <!-- Spring Quartz Start -->
    	<!-- Job -->
    	<bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    	    <!-- 서비스 구현 객체의 빈 이름을 인자로 줍니다. -->
    	    <property name="targetObject" ref="testQuartzJob" />
    	    <!-- 서비스 객체에서 주기적으로 실행될 메소드를 지정합니다. -->
    	    <property name="targetMethod" value="testMethod" />
    	    <!-- 동시 실행을 방지합니다. -->
    	    <property name="concurrent" value="false" />
    	</bean>
    
    	<!-- Trigger -->
    	<bean id="testJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    	    <property name="jobDetail" ref="testJob" />
    	    <!-- Trigger를 사용하여 1초 간격으로 실행되도록 지정했습니다. -->
    	    <property name="cronExpression" value="0/1 * * * * ?" />
    	</bean>
        
    	<!-- Scheduler -->
    	<bean id="testJobScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    	    <property name="triggers">
    			<!-- 앞에서 설정한 트리거를 등록합니다. 필요하면 여러개 만들어서 등록하면 됩니다. -->
    			<list><ref bean="testJobTrigger" /></list>
    	    </property>
    	</bean>
    <!-- Spring Quartz End -->

    4. 컴포넌트 스캔

    만약 새로 패키지를 생성했다면 root-context.xml에 컴포넌트 스캔 설정을 해줍니다.

    <context:component-scan base-package="com.test.quartz" />

    5. 실행결과