[TIL] 2020.09.01_TIL

TO_DO

  • [프로젝트] 자동이체 기능 구현

Quartz 라이브러리를 이용한 스케줄링

1. pom.xml 파일에 quartz 라이브러리의 의존성 추가

<!-- quartz 라이브러러리 -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>

2. 주기적으로 실행될 클래스와 메소드 설정

@Service("autoDebitExecute")
public class AutoDebitServiceImpl implements AutoDebitService {
	@Autowired
	private AutoDebitDAO autoDebitDAO;
	
	@Override
	public void autoDebitExecute() {

		Date now = new Date();
		System.out.println("Test job...." + now);
		autoDebitDAO.autoDebitExecute();
	}
}

3. spring-mvc.xml 파일에 스케줄러 설정을 추가

<!-- 테스트용 쿼츠 잡 -->
<bean id="testJob" class="org.springframework.scheduling.quartz MethodInvokingJobDetailFactoryBean">

  <!-- 서비스 구현 객체의 빈 이름을 인자로 설정 -->
  <property name="targetObject" ref="autoDebitExecute" />

  <!-- 서비스 객체에서 주기적으로 실행될 메소드를 지정 -->
  <property name="targetMethod" value="autoDebitExecute" />

  <!-- 동시 실행을 방지 -->
  <property name="concurrent" value="false" />
</bean>

<!-- 시간 간격 설정 
0/1 * * * * ?		매 1초 간격
0 0/1 * * * ?		매 1분 간격
0 * * * * ?			매 1분 간격
0 0 0/1 * * ?		매 1시간 간격
0 0 0 * * ?			매일 0시 마다
0 0 0 1 * ?			매월 1일 마다
0 0 0 1,10,20 * ?	매월 1일, 10일, 20일 마다
-->

<!-- 테스트용 트리거 -->
<bean id="testJobTrigger"
  class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
  <property name="jobDetail" ref="testJob" />
  <!-- CronTrigger를 사용하여 5초 간격으로 실행되도록 지정 -->
  <property name="cronExpression" value="0/5 * * * * ?" />
</bean>

<!-- 테스트용 스케줄러 -->
<bean id="testJobScheduler"
  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
    <!-- 앞에서 설정한 트리거를 등록 -->
    <list>
      <ref bean="testJobTrigger" />
    </list>
  </property>
</bean>

댓글남기기