>Java >java지도 시간 >Java의 Spring 프레임워크에서 Quartz를 구성하는 방법에 대한 튜토리얼

Java의 Spring 프레임워크에서 Quartz를 구성하는 방법에 대한 튜토리얼

高洛峰
高洛峰원래의
2017-01-23 10:58:311511검색

Spring에서 Quartz를 구성하는 과정:

1. JAR 패키지를 가져옵니다.

quartz에 필요한 JAR 패키지는 이미 Spring에 포함되어 있으며 해당 위치는 libquartz 아래의 quartz입니다. spring 이후의 디렉토리는 -all-1.6.1.jar,

프로젝트의 WEB-INF/lib에 복사하면 됩니다.


2. Spring이 시작될 때 quartz 구성 파일을 로드하도록 web.xml을 구성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <!-- spring -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application-*.xml</param-value>
  </context-param>
  
  <!-- spring监听 -->
  
  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
</web-app>

3. 실제로는 다음과 같은 quartz 구성 파일을 작성합니다. 구성은 완전히 괜찮습니다.

<?xml version="1.0" encoding="UTF-8"?>
  
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
  
  <!-- 任务实体 -->
  <bean id="testTaskBean" class="com.jp.task.TestTask" />
  
  <!-- 定时更新政策任务方法 -->
  <bean id="testTaskTimerMethod"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="testTaskBean" />
    <!-- targetMethod 配置定时执行的方法名 -->
    <property name="targetMethod" value="executeAction" />
    <property name="concurrent" value="false" />
  </bean>
  
  <!-- 定时更新政策触发器 -->
  <bean id="testTaskTrigger"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="syncPolicyTaskTimerMethod" />
        <!-- 每个3分钟的第0秒执行 -->
    <property name="cronExpression" value="0 0/3 * * * ?" />
  </bean>
  
  <!-- 订制任务列表 -->
  <bean id="scheduler"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <list>
        <ref bean="testTaskTrigger" />
      </list>
    </property>
  </bean>
</beans>

4. 작업을 실행하는 JAVA 클래스 TestTask를 작성합니다

package com.jp.task;
   
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
  
  
public class TestTask extends QuartzJobBean{
    
  Logger log = Logger.getLogger( PolicyServiceTest.class );
      
  public void executeAction(){
    log.info("Hello quartz");
  }
  
  @Override
  protected void executeInternal(JobExecutionContext arg0)
      throws JobExecutionException {
      
  }
  
}

5 .모든 작업이 완료되어 실행할 준비가 되었습니다. 기본적으로 오류가 보고되었습니다. NoSuchMethod와 같은 오류가 있습니다.
이 문제는 commons-collections.jar 버전이 너무 낮기 때문에 발생합니다. commons-collections-3.2.jar 이상이 필요합니다.

이때 찾고 있는 프로젝트에는 commons-collections-3.2.jar이 있습니다. 무슨 일이 일어나고 있는 걸까요? 다시 검색해 보면 hibernate에 있는 commons-collections-2.1.1.jar을 찾을 수 있습니다.

commons-collections-2.1.1.jar만 삭제하세요.


PS:cronExpression——Cron 표현식 설명

시간

월 날짜

주 날짜

연도(선택 필드)

특수 문자

Cron 트리거는 다음과 같이 일련의 특수 문자를 활용합니다. 다음은 표시됨:

백슬래시(/) 문자는 증분 값을 나타냅니다. 예를 들어 초 필드의 "5/15"는 5초부터 시작하여 15초마다를 의미합니다.

물음표(?) 문자와 문자 L 문자는 날짜 및 요일 필드에서만 사용할 수 있습니다. 물음표는 이 필드에 특정 값이 포함되어 있지 않음을 나타냅니다. 따라서 월 내의 날짜를 지정하는 경우 요일 필드에 "?"를 삽입하여 요일 값이 중요하지 않음을 나타낼 수 있습니다. 문자 L 문자는 마지막의 약자입니다. 해당 월의 마지막 날에 실행되도록 예약하려면 날짜 필드에 입력합니다. 요일 필드에서 "L"은 단독으로 존재할 경우 "7"과 같고, 그렇지 않으면 해당 월 내 요일의 마지막 인스턴스를 나타냅니다. 따라서 "0L"은 매월 마지막 일요일에 실행되도록 예정되어 있음을 의미합니다.

날짜 필드의 문자(W) 문자는 지정된 값에 가장 가까운 평일에 실행되도록 예약합니다. 해당 월의 첫 번째 영업일에 실행되도록 예약하려면 월 날짜 필드에 "1W"를 입력합니다.

파운드(#) 문자는 해당 월의 특정 근무일 인스턴스를 지정합니다. 매월 두 번째 월요일에 작업을 예약하려면 요일 필드에 "MON#2"를 입력합니다.

별표(*) 문자는 필드에 가능한 모든 값을 사용할 수 있음을 나타내는 와일드카드 문자입니다.
필드 허용 값에 ​​허용되는 특수 문자:
초 0-59, - * /
분 0-59, - * /
시간 0-23, - * /
날짜 1- 31, - * ? / L W C  
월 1~12월 또는 1월~12월, - * /  
주 1~7 또는 SUN-SAT, - * ? / L C #  
연도(선택 사항) 비워 두세요. 1970-2099, - * /
표현 의미
"0 0 12 * * ?" 매일 정오 12시에 트리거됨
"0 15 10 ? * *" 매일 오전 10시 15분에 트리거됨
"0 15 10 * * ?" 매일 오전 10시 15분에 트리거
"0 15 10 * * ? *" 매일 오전 10시 15분에 트리거
"0 15 10 * * ? 2005" 트리거 2005년 매일 오전 10시:15 트리거
"0 * 14 * * ?" 매일 오후 2시부터 오후 2시 59분까지 1분마다 트리거
"0 0/5 14 * * ?" 매일 오후 2시부터 2시 59분까지 1분 2시 55분 동안 5분마다 트리거
"0 0/5 14,18 * * ?" 오후 2시부터 2시 55분과 6시 사이에 5분마다 트리거 매일 6:55
"0 0-5 14 * * ?" 매일 오후 2시부터 오후 2시 5분까지 1분마다 트리거
"0 10,44 14 ? 3 WED" 매주 수요일 오후 2시 10분 3월 및 2시 44분은
"0 15 10 ? * MON-FRI"가 월요일부터 금요일까지 오전 10시 15분에 트리거됩니다.
"0 15 10 15 * ?"는 15일 오전 10시 15분에 트리거됩니다. 매월
"0 15 10 L * ?" 매월 마지막 날 오전 10시 15분에 트리거
"0 15 10 ? * 6L" 매월 마지막 금요일 오전 10시 15분에 트리거
"0 15 10 ? * 6L 2002-2005" 2002년부터 2005년까지 매월 마지막 금요일 오전 10시 15분에 트리거됨
"0 15 10 ? * 6#3" 오전 10시 15분에 트리거됨 매월 세 번째 금요일
매일 오전 6시

0 6 * * *

2시간 간격

0 */2 * * *
오후 11시부터 오전 8시 사이 2시간마다 오전 8시

0 23-7/2, 8 * * *

매월 4일 및 매주 월요일~수요일 오전 11시 '시계

0 11 4 * 1-3
1월 1일 오전 4시

0 4 1 1 *

Java용 Spring 프레임워크에 대한 추가 정보 Quartz 구성에 대한 튜토리얼을 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.