일정주기마다 특정 작업을 실행시키는 기능
교육이 끝나고 각 교육과정에 따라서 교육 설문 또는 수료증을 제출해야 하는데
매번 교육이 끝날 때마다 인원을 체크해서 관리자가 직접 메일을 보낼 수 없기 때문에
사용자의 편의성 및 효율성을 올려주기 위해 스케줄러를 사용했다.
✔dispatcher-servlet에 특정 class를 심어주고 Cron 주기설정을 추가하여 트리거(이벤트)를 발생
<bean name="JobPath" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass">
<value>egovframework.home.cmmn.quartz.quartzController</value>
</property>
</bean>
<bean id="JobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="JobPath"/>
</property>
<property name="cronExpression">
<value>*/20 * * * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="JobTrigger"/>
</list>
</property>
</bean>
✔발생 시킨 class에 로직을 추가
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class quartzController extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
int random = (int)(Math.random()*100+1);
System.out.println("======================================");
System.out.println("exampleJob......" + random);
System.out.println("mail 수신자 조회 로직 실행");
System.out.println("mail 전송 로직 실행");
System.out.println("======================================");
}
}
✔실행
보안상의 이유로 임의의 코드를 구현해 보았는데
스프링4에서 세터주입등에서 ref local="빈이름" 을 사용하면 아래와 같은 오류가 발생한다.
찾아보니 이클립스 스프링 통합의 버그 라고 하는데
스프링 4.0 부터는 spring-beans.xsd 에서 local을 지원하지 않기에 스프링 프레임워크 4.0버전 이하의 프로젝트일 경우 아래와 같이 schemaLocation에서 버전을 3.2로 바꾸어주면 된다.
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd