SPRING | Quartz Scheduler

Ga0·2023년 9월 13일
0

SPRING

목록 보기
14/14

Quartz

  • JAVA 스케줄링 오픈소스 라이브러리로, Spring과 함께 사용할 수 있다.
  • 배치 작업이나 변경된 정보를 주기적으로 반영하고자할 때 사용한다.

기본 구성

  • job : 스케줄링할 실제 작업을 가지는 객체
  • jobDetail : job의 정보를 구성하는 객체 -> "어떤 작업을 할것인가"
  • Trigger : job이 언제 시행될지 구성하는 객체 -> "어떻게 할 것인가. (어떠한 방식, 어떠한 주기??)"
  • jobData : job에서 사용할 데이터를 전달하는 역할을 하는 객체(파라미터와 같은 원리?)
  • Scheduler : jobDetail과 Trigger 정보를 이용해서 job을 시스템에 등록 -> Trigger가 동작하면 지정된 job을 시행되도록 하는 객체(지시)
  • SchedulerFactory : Scheduler 인스턴스를 생성하는 역할을 하는 객체
  • quartz.properties : Quartz 스케줄러를 위한 설정을 담당하는 파일

예시 코드

  <!-- pom.xml -->
  <!-- Quartz를 사용하기 위한 의존성 추가 -->
   <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>1.8.5</version>
   </dependency>
	<!-- 
	 context-schdule.xml 
		- spring 설정 폴더 안의 schedulering 관련 파일에 추가
		- 만약, 없다면 새로 만들어주기.
	-->
	<!-- job Detail -->
	<bean id="jobInfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="sampleSchdulering" /> 	  <!-- 사용하려는 CLASS -->
		<property name="targetMethod" value="batchFunc" />			  <!-- 사용하려는 CLASS의  METHOD -->
		<property name="concurrent" value="false" />				  <!-- 전의 job이 끝까지 전까지 다른 job을 시작하지 않는다. jobs 동시작용X -->		  
	</bean>

	<!-- Trigger -->
 	<bean id="triggerInfo" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="jobInfo" />		   	   <!-- "어떤 작업을 할것인가" job Detail : 스케줄러에서 수행할 작업을 담을 job-->
	    <property name="cronExpression" value="0 0 0 * * ?" /> <!-- "어떻게 할것인가" 스케줄러를 어떤 방식으로 어떤주기로 작동할지 결정 -->
	</bean>
	 
	 <!-- Scheduler -->
	<bean id="schedulerInfo" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers"> <!-- 트리거 값 지정 -->
			<list>
				<ref bean="triggerInfo" />  <!-- 트리거는 autoSendMsgTrigger2형식으로 진행 -->
			</list>
		</property>
	</bean>
// 스케줄링 관련된 코드 작성
@Slf4j
@Service("sampleSchdulering"); //sampleSchdulering.class : targetObject
public class SampleJob{
 
 	
    protected void batchFunc(){ //batchFunc() : targetMethod
    	//동작시킬 코드 넣기
    }
}
  • 예시와 같은 방식으로 의존성 주입 -> 스케줄러 Bean 생성(+트리거, jobDetail 등등 / 속성 값 추가) -> 사용할 곳에 해당 코드 넣기

내용 출처 | https://oingdaddy.tistory.com/72

0개의 댓글