>Java >java지도 시간 >Spring+quartz 구현 예

Spring+quartz 구현 예

PHP中文网
PHP中文网원래의
2017-06-21 09:28:161483검색

친구의 프로젝트에 문제가 있습니다. 그의 팀은 Spring 아키텍처를 기반으로 하며 예약된 실행이 필요한 비교적 간단한 작업을 수행합니다. 자신의 요구 사항을 이해한 후 그는 상대적으로 간단한 Spring+quartz 구현을 제안했습니다.

이 문서에서는 완료된 Spring 프로젝트에서 가장 간단한 예약 작업을 완료하는 방법만 설명합니다.

첫 번째 단계는 매우 흥미롭고 흥미로운 Spring 아키텍처를 아는 것입니다. 기능 모듈을 자유롭게 연결하고 분리하는 효과를 얻을 수 있습니다. 엔지니어링 프로젝트는 MAVEN 패키지 종속성 관리를 기반으로 하므로 이번에 필요한 종속성 패키지 참조 목록을 나열하세요.

 1 <!-- 定时器依赖 开始 --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-context-support</artifactId> 5 <version>4.0.2.RELEASE</version> 6 </dependency> 7  8   9 10 <dependency>11 <groupId>org.quartz-scheduler</groupId>12 <artifactId>quartz</artifactId>13 <version>2.2.1</version>14 </dependency>15 <!-- 定时器依赖 结束 -->

물론 이는 해당 Spring 버전과 일치해야 합니다. 여기서 우리 프로젝트는 4.0.2입니다. 이전 패키지인 spring-context-support는 주로 Spring과 quartz 사이의 통신 및 관리를 위한 컴포넌트로 사용되었습니다. 주석 처리하면 이와 같은 오류가 보고됩니다

MAVEN이 필요한 패키지를 구성한 후에는 (다른 패키지는 당분간 여기에서 확장하지 않을 것입니다. 이 기사에서는 전체 Spring 프로젝트의 구성에 대해서만 설명합니다.) 예약된 작업의 기능 모듈을 이 프로젝트에 추가하기 시작할 수 있습니다.

두 번째 단계는 웹 프로젝트의 원본부터 시작하여 web.xml을 변경하는 것입니다. 원래 프로젝트의 Spring 구성 파일이 Spring-mvc.xml이었으므로 예약된 작업의 구성 파일을 spring-time.xml로 변경했습니다. 이러한 방식으로 시작 시 동일한 스캔 구성을 읽을 수 있습니다. 구체적인 코드는 다음과 같습니다.

1 <context-param>2         <param-name>contextConfigLocation</param-name>3         <param-value>classpath:spring-*.xml</param-value>4     </context-param>

그럼 내 프로젝트 구조를 보여드리겠습니다. ’ 를

불렀습니다. 이 단계를 달성한 후에는 계속해서 진행할 수 있습니다.

세 번째 단계는 spring-timer.xml 예약 작업의 핵심 구성을 완료하는 것입니다. 이 파일 구성에서는 주로 다음 세 가지를 완료합니다.

1. 시작 설정 구성, 지연 로딩 관련(간단히 말하면, 예를 들어 특정 변수를 null로 초기화하는 것도 일종의 지연 로딩입니다. 서비스 시작 이후에는 실제로 호출될 때만 인스턴스화되며 그렇지 않으면 메모리에 존재하지 않습니다. 논리적으로 공간을 절약할 수 있지만 오랜 지연 후에 문제가 발견될 수도 있습니다. 2. quartz-2.x의 구성에는 예약된 작업이 트리거된 후 호출되는 작업 이름과 옥수수 표현(즉, 프로그램이 반복 실행되는 이유는 나중에 추가될 예정입니다.

3. 작업 내용과 작업에 해당하는 특정 클래스를 구성합니다.

이제 논리 프로세스에 대한 설명이 완료되었으므로 다음 코드가 있습니다.

 1 <?xml version="1.0" encoding="UTF-8"?>   2 <beans xmlns="http://www.springframework.org/schema/beans"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  4     xmlns:p="http://www.springframework.org/schema/p"   5     xsi:schemaLocation="http://www.springframework.org/schema/beans  
 6      ">   7    8         <!-- 启动触发器的配置开始 -->   9     <bean name="startQuertz" lazy-init="false" autowire="no"  10         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  11         <property name="triggers">  12             <list>  13                 <ref bean="myJobTrigger" />  14             </list>  15         </property>  16     </bean>  17     <!-- 启动触发器的配置结束 -->  18   19     <!-- 调度的配置开始 -->  20     <!--  21         quartz-1.8以前的配置   
22     <bean id="myJobTrigger"  
23         class="org.springframework.scheduling.quartz.CronTriggerBean">  
24         <property name="jobDetail">  
25             <ref bean="myJobDetail" />  
26         </property>  
27         <property name="cronExpression">  
28             <value>0/1 * * * * ?</value>  
29         </property>  
30     </bean>  
31     -->  32     <!-- quartz-2.x的配置 -->  33     <bean id="myJobTrigger"  34         class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  35         <property name="jobDetail">  36             <ref bean="myJobDetail" />  37         </property>  38         <property name="cronExpression">  39         40         <value>0/10 * *  * * ?</value>41           <!--   <value>1 52 * * * ?</value>  --> 42         </property>  43     </bean>  44     <!-- 调度的配置结束 -->  45   46     <!-- job的配置开始 -->  47     <bean id="myJobDetail"  48         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  49         <property name="targetObject">  50             <ref bean="myJob" />  51         </property>  52         <property name="targetMethod">  53             <value>work</value>  54         </property>  55     </bean>  56     <!-- job的配置结束 -->  57   58     <!-- 工作的bean -->  59     <bean id="myJob" class="com.tec.kevin.quartz.jobTest" />  60   61 </beans>

여기에서 구성 파일 구성을 완료한 후 다음 단계를 시작할 수 있으며 특정 비즈니스 논리가 구현됩니다. 네 번째 단계는 특정 비즈니스 로직을 구현하는 것입니다.

여기서 주목해야 할 점은 아래 그림의 2가지 사항입니다

위 그림은 특정 업무 구현 클래스이며, 내부 이름은 그림 속 예정된 작업 구성과 동일해야 합니다. 아래에.

위 작업을 완료한 후 프로젝트를 시작하고 실제 효과를 확인할 수 있습니다.

여기에서는 이전 구성에서 10초마다 실행되는 0/10 * * * * ?에 따라 예약된 작업이 실행되는 것을 볼 수 있습니다.

                                                                                                                                                                                                                      동시에 두 번 실행되었습니다. 나중에 발견한 이유는 web.xml을 구성할 때 예약된 작업이 반복적으로 구성되어 여러 번 실행되는 결과를 낳았기 때문입니다. 이런 상황이 발생하면 내 솔루션을 참조할 수 있습니다.

다음에는 두 개의 기사가 있을 것입니다. 하나는 예약된 작업을 작성하는 더 간단한 구현 방법이고 다른 하나는 cron 표현식을 설명합니다.

위 내용은 Spring+quartz 구현 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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