[JAVA]🍊 cron-trigger / spring quartz 동적 μŠ€μΌ€μ€„λ§

1
post-thumbnail

🍊 νšŒμ‚¬ ν”„λ ˆμž„μ›Œν¬ 기반 κ²Œμ‹œνŒμ„ λ§Œλ“  ν›„, μ›Ήμ—μ„œ μŠ€μΌ€μ€„λ§μ„ 닀룰일이 μžˆμ–΄μ„œ 미리 κ³΅λΆ€ν–ˆλ‹€.

1. CronTrigger ?


CronTriggerλŠ” β€œλ§€μΌ κΈˆμš”μΌ μ •μ˜€β€, λ˜λŠ” β€œλ§€ 주말 μ˜€μ „ 9μ‹œβ€, β€œ1μ›” ν•œλ‹¬κ°„ 맀주 μ›”μš”μΌ, μˆ˜μš”μΌ, κΈˆμš”μΌ μ˜€μ „ 9μ‹œμ—μ„œ 10μ‹œ 사이 5λΆ„ 간격”과 같이 μŠ€μΌ€μ€„μ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Cronν‘œν˜„μ‹μ€ CronTrigger μΈμŠ€ν„΄μŠ€λ₯Ό μ„€μ •ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€. Cronν‘œν˜„μ‹μ€ 7개의 λ‹¨μœ„ ν‘œν˜„μ‹μœΌλ‘œ κ΅¬μ„±λœ λ¬Έμžμ—΄ μž…λ‹ˆλ‹€. 각 λ‹¨μœ„λŠ” μŠ€μΌ€μ€„μ„ μ„ΈλΆ„ν™” ν•˜μ—¬ μƒμ„Έν•˜κ²Œ κΈ°μˆ ν•©λ‹ˆλ‹€. 이 λ‹¨μœ„ ν‘œν˜„μ‹μ€ 곡백으둜 κ΅¬λΆ„λ©λ‹ˆλ‹€.

초(Seconds)
λΆ„(Minutes)
μ‹œ(Hours)
일(Day-of-Month)
μ›”(Months)
μš”μΌ(Days-of-Week)
연도(Year) - optional

이듀을 μ‘°ν•©ν•œ Cronν‘œν˜„μ‹μ€ β€œ0 0 12 ? * WEB”와 같이 ν‘œν˜„λ©λ‹ˆλ‹€. 이것은 β€œλ§€μ£Ό μˆ˜μš”μΌ μ •μ˜€β€λ₯Ό 의미 ν•©λ‹ˆλ‹€. (μ—°λ„λŠ” μƒλž΅)
β€œ/” λ¬ΈμžλŠ” κ°’μ˜ 증가 ν‘œν˜„μ— μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Όλ“€μ–΄, λΆ„(Minutes) ν•„λ“œμ— β€˜0/15’ λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄, 이것은 β€œ0λΆ„ λΆ€ν„° μ‹œμž‘ν•˜μ—¬ (μ‹œκ°„μ˜) 맀 15λΆ„ λ§ˆλ‹€β€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
β€œ?β€λ¬ΈμžλŠ” 일(day-of-month)와 μš”μΌ(day-of-week) ν•„λ“œμ—μ„œλ§Œ ν—ˆμš©λ©λ‹ˆλ‹€.

Cron ν‘œν˜„μ‹ 예제

*맀 5λΆ„ λ§ˆλ‹€ μ‹€ν–‰
β€œ0 0/5 * ?”
*10μ΄ˆλ’€ 5λΆ„λ§ˆλ‹€ μ‹€ν–‰. (10:00:10 am, 10:05:10 am, …)
β€œ10 0/5 * ?”
*맀주 μˆ˜μš”μΌκ³Ό κΈˆμš”μΌ 10:30, 11:30, 12:30, 13:30 에 μ‹€ν–‰
β€œ0 30 10-13 ? * WED,FRI”
*맀월 5일, 20일 μ˜€μ „ 8μ‹œλΆ€ν„° μ˜€μ „ 10μ‹œ 사이에 30λΆ„ κ°„κ²©μœΌλ‘œ μ‹€ν–‰. 이 νŠΈλ¦¬κ±°λŠ” 10:00 amμ—λŠ” 싀행이 λ˜μ§€ μ•Šκ³ , 8:00, 8:30, 9:00, 9:30 μ—λ§Œ μ‹€ν–‰ λœλ‹€.
β€œ0 0/30 8-9 5,20 * ?”

2. Setting

    1. pom.xml
<!--  Scheduler  -->
<dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz</artifactId>
	<version>${quartz.version}</version>
</dependency>
    1. cron-trigger.properties
test.trigger.cronexpr=0 * * * * ?
    1. servlet-context.xml
<!-- 1. Cron λŒ€μƒμ΄ λ˜λŠ” 클래슀 μ •μ˜ -->
<bean name="testScheduleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
	<property name="jobClass" value="com.jihoon.web.scheduler.testScheduleJob" />
	<property name="jobDataAsMap">
	<map>	<entry key="service" value-ref="searchEventTagService" />	</map>
	</property>
</bean>
<!-- 2. Cron μ‹œκ°„ μ„€μ • -->
<bean id="test" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
	<property name="jobDetail" ref="testScheduleJob" />
	<property name="cronExpression" value="${test.trigger.cronexpr}" />	
</bean>
<!-- 3. Cron μ‹€ν–‰ -->
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="quartzProperties">
		<props>	<prop key="xxxxx">xx</prop>	</props>
		</property>
	<property name="triggers">
	<list>
		<ref bean="test" />
	</list>
	</property>
</bean>
    1. testSchedleJob.java
package com.seculayer.web.scheduler;

import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.xxx.web.system.SearchEventTagService;

public class testScheduleJob extends QuartzJobBean{
	
	static Logger logger = Logger.getLogger(testScheduleJob.class);
	
	private Object svc;
	
	public void setService(Object svc) {
		this.svc = svc;
	}

	protected void executeInternal(JobExecutionContext context)
			throws JobExecutionException {
		logger.info("TestScheduleJob Excute Start!!!");
		
		try {
			((SearchEventTagService)svc).jihoon();
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		logger.info("TestScheduleJob Excute End!!!");
	
	}

}
    1. SearchEventTagService.java
	public void jihoon() {
		System.out.println("jihoonjihoonjihoon");
		
	}
  • κ²°κ³Ό

    λ™μ μœΌλ‘œ μŠ€μΌ€μ€„λ§ λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.
profile
α΄…α΄‡Μα΄ α΄‡ΚŸα΄α΄˜α΄˜α΄‡α΄œΚ€. α΄˜Κ€α΄Ι’Κ€α΄€α΄α΄α΄€α΄›Ιͺᴏɴ πŸ”₯

0개의 λŒ“κΈ€