우선 화석 수준인 Spring 2.5 버전이다.
처음에 테스트 해본다고 Spring 4.0 버전에서 했을 땐 어노테이션 이용해서 구현을 했는데 Spring 2.5 인 작업 프로젝트에서는 어노테이션을 쓰지 못했다.
스키마를 추가해줘도 찾지 못한다고 오류가 발생해서 키보들 뿌실 뻔했다.
우선 quartz 라는 라이브러리를 다운받아야 한다.
우선 다운 받으면 다음과 같은 .jar 파일을 볼 수 있을 것이다.
1. c3p0-0.9.1.1.jar
2. log4j-1.2.16.jar
3. quartz-2.2.3.jar
4. quartz-jobs-2.2.3.jar
5. slf4j-api-1.7.7.jar
6. slf4j-log4j12-1.7.7.jar
아 그리고 우리는 스프링 버전이 매우 낮기 때문에 다운받은 .jar 파일들을 사용하면 오류가 발생한다. 그렇기 때문에 quartz-2.2.3.jar 버전은 1.8.6 버전으로 사용해야 한다.
6개의 .jar 파일들을 프로젝트에 추가시켜주자. 근데 생각해보니 왜 maven 을 사용하지 않을까란 생각을 할 수 있는데 내가 맡은 프로젝트에는 maven 기반이 아니다 ㅎㅎ 디지겠다.
서버가 돌아갈 때 같이 실행시킬 클래스를 하나 만들자. 난 CronTest 라고 클래스를 생성해주었다.
package kr.co.iquest.lhotse;
import java.util.Date;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class CronTest extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
System.err.println(new Date());
}
}
나는 빨간색 글씨가 내 눈에 잘 띄기 때문에 err 로 했다. 로그가 엄청 많이 콘솔에 출력이 되고 있어서 찾을 수가 없다.
이걸 본 사람들은 이제 삽질을 하지 않아도 된다.
bean 설정 파일로 뭐 이름을 ~-context.xml 라고 해놓았을테니 거기다가 bean 생성을 해주자.
<bean id="cronTest" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="kr.co.iquest.lhotse.CronTest"></property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="cronTest"></property>
<property name="cronExpression" value="0/5 * * * * ?"></property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>
다 됐다. xml 해석 정도는 할 수 있으리 믿는다. 주입시켰다.
여기서 cronExpression 에 0/5 * * * * ? 라고 해놓았는데 5초마다 실행된다는 뜻이다. 알아서 찾아서 사용하자.
그리고 마지막 SchedulerFactoryBean 클래스로 등록된 Bean 에 <list> 안에 <ref bean="cronTrigger"> 을 볼 수 있다.
나는 모르고 여기를 cronTest 라고 해서 오류가 터졌는데 헤매다가 보니 난 멍청했다. 제발 멍청한 짓은 안 했으면 좋겠다.
이제 톰캣 실행을 하면
[사진 1: 스케줄러 작동]
끝~