스케줄러

남기현·2022년 4월 5일
0
post-thumbnail

📌스케줄러

일정주기마다 특정 작업을 실행시키는 기능

📌업무설명

교육이 끝나고 각 교육과정에 따라서 교육 설문 또는 수료증을 제출해야 하는데
매번 교육이 끝날 때마다 인원을 체크해서 관리자가 직접 메일을 보낼 수 없기 때문에
사용자의 편의성 및 효율성을 올려주기 위해 스케줄러를 사용했다.

📌코드

✔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("======================================");
 		 		
 	}

}

✔실행

📌error

보안상의 이유로 임의의 코드를 구현해 보았는데
스프링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
profile
내가 보려고 만든 velog

0개의 댓글