개인적인 정리

스케줄러 사용법 본문

전자정부표준프레임워크

스케줄러 사용법

yeon.Biju 2018. 9. 29. 11:58

전자정부프레임워크 스케쥴러 사용법

 

http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:fdl:scheduling

 

 

Scheduling 서비스

 

quartz를 이용한 방법

 

간단한 방법 !!!!

 

 

 

 

1. 라이브러리 복사

전자정부프레임워크를 사용하면 이미 라이브러리가 들어 있을 것 같다.

 

quartz-2.1.7.jar

quartz-jobs-2.2.1.jar

의 라이브러리가 필요하다.(버전이야 꼭 이 버전일필요는 없을 것 같고,  전자정부프레임워크에 이미 들어있는 버전이 이 버전이었다)

 

* 라이브러리가 없는 경우

1) 메이븐을 사용하는 경우라면 pom.xml 에 다음과 같이 추가해준다.

<dependency>

            <groupId>org.quartz-scheduler</groupId>

            <artifactId>quartz</artifactId>

            <version>2.1.7</version>

            <exclusions>

                <exclusion>

                    <artifactId>slf4j-api</artifactId>

                    <groupId>org.slf4j</groupId>

                </exclusion>

            </exclusions>

        </dependency>

 

<dependency>

            <groupId>org.quartz-scheduler</groupId>

            <artifactId>quartz-jobs</artifactId>

            <version>2.2.1</version>

        </dependency>

 

2) 메이븐을 사용하지 않는 경우

quartz-2.1.7.jar

quartz-jobs-2.2.1.jar 

을 구해서 WEB-INF/lib 에 넣어준다.

 

2. context-scheduling.xml 파일을 생성한다.

resources/egovframework/spring/com/ 아래 생성한다.

 

파일명은 큰 의미는 없다.

 

**파일명 생성시 주의

 

web.xml 을 확인해보면 아래와 같은 구문이 있다.

 

<context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*:egovframework/spring/com/**/context-*.xml</param-value>

    </context-param>

 

이 구분에 맞는 조건의 xml 파일을 임의로 생성한다.

 

* targetObject 는 편의상 service 명으로 했다.

*  작업, 트리거, 스케쥴러 3개를 하나의 세트라고 생각하면 되겠다.

 

 

내용은 아래와 같다

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

 

<!-- aaaa 작업 정의 -->

<bean id="aaaaEvents" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="AaaaEventsService" />  <!-- service 명 -->

<property name="targetMethod" value="aaaaInsert" />  <!-- service 내의 method 명 -->

<property name="concurrent" value="false" />

</bean>

 

<!-- aaaa 트리거 정의 -->

<bean id="aaaaEventstrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

    <property name="jobDetail" ref="aaaaEvents" />

    <property name="cronExpression" value="0 00 6 ? * *" /> <!--  매일 아침 6시에 살행 -->

</bean>

 

<!-- bbbb 작업 정의 -->

<bean id="bbbbBlog" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="BbbbBlogService" />

<property name="targetMethod" value="insertBbbbBlog" />

<property name="concurrent" value="false" />

</bean>

 

<!-- bbbb 트리거 정의 -->

<bean id="bbbbBlogTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

    <property name="jobDetail" ref="bbbbBlog" />

    <property name="cronExpression" value="0 00 7 ? * *" />

</bean>

 

<!-- 공지사항 작업 정의 -->

<bean id="notice" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="NoticeService" />

<property name="targetMethod" value="insertNotice" />

<property name="concurrent" value="false" />

</bean>

 

<!-- 공지사항 트리거 정의 -->

<bean id="noticeTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">

    <property name="jobDetail" ref="notice" />

    <property name="cronExpression" value="0 30 * * * ?" />

</bean>

 

<!-- 스케줄러 정의 -->

<bean id="ddddScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref bean="aaaaEventstrigger" />

<ref bean="bbbbBlogTrigger" />

<ref bean="noticeTrigger" />

</list>

</property>

</bean>

 

</beans>

 
 
 
2018.10.01 내용추가
 
<property name="targetMethod" value="insertNotice" />
 
이 부분의 insertNotice 메소드에서
 
insertNotice(Aaaa aaaa) 이런 형태로 구현된 메소드를 쓰면 에러가 발생한다.
 
Caused by: java.lang.NoSuchMethodException: com.sun.proxy.$Proxy44.insertNotice
이런 식으로 에러가 발생
 
 
생각해보면 당연한 일로 보인다. 인자를 넘겨줄수가 없는 구조였으니 에러가 발생하는 것이 당연하다. 다만 NoSuchMethodException 이 발생하여서... 뭔지 한참 찾았다.
 
 

 

Comments