본문으로 바로가기

[스프링] 10. Quartz 라이브러리

category SPRING/스프링 2021. 4. 24. 13:02
728x90
반응형
SMALL

스케줄러를 구성하기 위해서 사용된다.

서버를 운영하기 위해선 간혹 주기적으로 매일, 매주, 매월 등 특정 프로그램을 실행 할 필요가 있다.

운영체제의 기능을 이용해서 작업할 수도 있으나 스프링과 Quartz 라이브러리를 이용하면 간단히 처리할 수 있다.

 

1.pom.xml 의존성 등록

<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.3.2</version>
</dependency>

 

2.root-context.xml 어노테이션 등록(<task:annotaion-driven>)

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

<beans
	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring
 http://mybatis.org/schema/mybatis-spring-1.2.xsd
  http://www.springframework.org/schema/task
   http://www.springframework.org/schema/task/spring-task-4.3.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.3.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans">

<context:annotation-config/>


<bean class="com.zaxxer.hikari.HikariConfig" id="hikariConfig">

<property value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" name="driverClassName"/>

<property value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE" name="jdbcUrl"/>

<property value="book_ex" name="username"/>

<property value="book_ex" name="password"/>

</bean>

<!-- HikariCP configuration -->



<bean class="com.zaxxer.hikari.HikariDataSource" id="dataSource" destroy-method="close">

<constructor-arg ref="hikariConfig"/>

</bean>


<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">

<property name="dataSource" ref="dataSource"/>

</bean>


<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">

<property name="dataSource" ref="dataSource"/>

</bean>

<tx:annotation-driven/>

<mybatis-spring:scan base-package="org.zerock.mapper"/>

<context:component-scan base-package="org.zerock.service"/>

<context:component-scan base-package="org.zerock.aop"/>

<context:component-scan base-package="org.zerock.task"/>

<aop:aspectj-autoproxy/>

<task:annotation-driven/>

</beans>

 

3.task 패키지 내의 FileCheckTask 클래스를 만들어 스케줄러 동작

@Scheduled 어노테이션 내에는 cron 이라는 속성을 부여하여 주기를 제어할 수 있음. 

로그의 기록은 log.warn() 레벨을 이용함 

FileCheckTask의 동작을 확인하기 위해 root-context.xml 에 스프링 빈으로 등록되어있음

<context:component-scan base-package="org.zerock.task"/>

테스트 시작

cron 초 분 시 일 월  (주단위)

package org.zerock.task;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import lombok.extern.log4j.Log4j;

@Log4j
@Component
public class FileCheckTask {
	//매분 0초가 될 때마다 실행한다
	@Scheduled(cron="0 * * * * *")
	public void checkFiles() {
		
		log.warn("File check Task run......");
		
		log.warn("=============================");
	}
	
	
	

}

1분 주기로 로그가 실행되는것이 확인됨

728x90
반응형
LIST