이 기사에서는 Spring의 타이밍 스케줄링에 대한 예를 주로 소개합니다. 시스템은 아무도 근무하지 않는 특정 시간에 특정 기능을 수행할 수 있습니다.
1. 콘텐츠 소개
소위 예약 스케줄링이란 전통적인 용어로 아무도 근무하지 않는 특정 시간에 시스템이 특정 기능을 수행할 수 있는 메커니즘을 말합니다. 개발에서는 예약된 스케줄링 작업을 두 가지 형태로 나눕니다.
예약된 트리거: 특정 시점에 특정 처리 작업을 수행합니다.
간격 트리거: 몇 초마다 수행됩니다. 특정 작업을 자동으로 처리합니다. .
모든 처리는 컴퓨터 시스템의 기본 클럭 생성기에 의존합니다. Java의 초기 구현 프로세스에는 타이밍 처리를 위해 특별히 제공되는 두 가지 클래스인 Timer 및 TimerTask가 있으며, 그중 TimerTask는 주로 실행을 정의합니다. 작업은 특정 작업을 수행하기 위해 스레드를 시작하는 것과 같습니다.
rreee그런데 매년 특정 달의 특정 시간, 분, 초에 작업을 수행해야 한다면 어떻게 할 수 없습니다. 타이머와 TimerTask를 사용합니다. 프로젝트 개발에는 타이밍 제어를 위한 두 가지 옵션이 있는 경우가 많습니다.
quartz 구성 요소: 별도로 구성해야 하는 엔터프라이즈 및 타이밍 스케줄링 구성 요소
SpringTask: 경량 구성 요소, 간단한 구성 가능 Annotation을 사용하여 구성 처리를 구현합니다.
2. Quartz는 타이밍 스케줄링을 정의합니다
Quartz 컴포넌트를 사용하려면 Quartz 개발 패키지를 가져와서 pom.xml에 Quartz 개발 패키지를 추가해야 합니다.
public class MyTask extends TimerTask{ @Override public void run() {//定义要执行的任务 // TODO Auto-generated method stub String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); System.out.println(currentTime); } } public class MyTaskTest { public static void main(String[] args) { Timer timer=new Timer(); timer.schedule(new MyTask(), 1000);//启动任务,延迟1秒后执行。 } }
패키지 소개 후 일정을 개발할 수 있습니다.
두 가지 구현 모드가 있습니다.
QuartzJobBean 상위 클래스를 상속하는
구성을 직접 사용하여 메소드 스케줄링 제어를 달성합니다.
1. 상위 클래스를 상속하여 작업 처리를 구현합니다.
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency>
모든 예약된 일정은 Spring 제어 파일에서 활성화되어야 합니다. 즉, 예약된 작업을 활성화하기 위해 명시적인 클래스를 작성할 필요가 없습니다.
2. applicationContext.xml 파일에 타이밍 스케줄링 구성을 추가하고 타이밍 스케줄링 팩토리 클래스를 통해 구현합니다.
public class MyTask2 extends QuartzJobBean{ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); System.out.println(currentTime); System.out.println("具体的任务实现!!!"); } }
그런 다음 작업의 트리거 작업을 구성합니다. 작업 구성에는 두 가지 유형이 있습니다.
간격 트리거를 사용합니다. 특정 기간;
팩토리 클래스: org.springframework.scheduling.quartz.SimpleTriggerFactoryBean
<bean id="taskFactory" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="cn.wnh.timerSask.MyTask1" /> <property name="jobDataMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
간격 트리거 스케줄러 설정: org.springframework .scheduling.quartz .SchedulerFactoryBean
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- 定义间隔触发的执行程序类 --> <property name="jobDetail" ref="taskFactory"></property> <!-- 设置定时触发延迟时间 --> <property name="startDelay" value="0"></property> <!-- 单位是”毫秒“ --> <property name="repeatInterval" value="2000"></property> </bean>
3. 이제 모든 간격 트리거 제어는 Spring에서 관리됩니다. 간격 트리거 작업을 구현합니다.
Cron을 사용하여 예약된 트리거링 구현
Quartz는 간격 트리거링을 구현할 수 있을 뿐만 아니라 Cron과 결합하여 가장 중요한 기능인 예약된 트리거링을 구현할 수도 있습니다.
일반 프로젝트에서 가장 일반적으로 사용되는 모드: 정시에 트리거, 월초에 트리거, 연초에 트리거.
이전 간격 트리거 구성을 수정하고 CronTriggerFactoryBean을 사용하여 예약된 트리거를 구현합니다.
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleTrigger" /> </list> </property> </bean>
Spring 컨테이너를 시작하세요.
2. 타이밍 스케줄링을 구현하기 위해 클래스를 상속하지 마세요
프로젝트 개발에서 상속은 단일 상속의 제한된 제어로 직접 이어지므로 이 경우 Spring에서는 다음을 수행하는 방법을 제공합니다. 필요 없음 클래스를 상속하면 예약된 작업에 대한 작업 처리를 구현할 수 있습니다.
작업 실행 클래스를 정의하고 어떤 클래스도 상속하지 않습니다.
<bean id="taskFactory" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="cn.wnh.timerSask.MyTask1" /> <property name="jobDataMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
applicationContext.xml에서 팩토리 클래스 구성: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
public class MyTask2 { public void taskSelf(){ String task=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()); System.out.println(task); System.out.println("执行具体任务操作"); } }
그런 다음 작업 예약 구성에서 새 프로그램 클래스를 구성합니다.
<bean id="taskFactory2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="cn.wnh.timerSask.MyTask2" /> </property> <!--配置要执行的方法 --> <property name="targetMethod" value="taskSelf" /> </bean>
예약된 예약을 달성하려면 컨테이너를 시작하세요.
이 모드에는 클래스 상속 종속성이 없으며 처리가 더 유연해집니다.
Spring Task는 예약된 스케줄링을 구현합니다
Spring에는 예약된 스케줄링을 자체적으로 지원하므로 Quartz보다 사용하기 훨씬 더 쉽습니다.
두 가지 구현 방법이 있습니다. 1. applicationContext.xml에서 구현을 구성합니다. 2. Annotation을 사용하여 구현합니다.
단, 어떤 모드를 사용할지는 먼저 작업 처리 클래스가 있어야 합니다.
작업 처리 클래스를 정의합니다.
여기서는 이전 MyTask2 클래스를 다시 작성하지 않고 바로 사용합니다.
applicationContext.xml 파일 수정:
작업 처리를 위한 네임스페이스 정의 추가 필요:
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="taskFactory2" /> <!-- cron表达式,描述每分钟触发一次 --> <property name="cronExpression" value="* * * * * ?" /> </bean>
1 구성 간격 트리거링을 달성하기 위한 작업 작업 구성입니다.
<beans xmlns:task="http://www.springframework.org/schema/task" http://www.php.cn/ http://www.php.cn/ >
cron을 사용하여 예약된 트리거링 구현
<bean id="myTask" class="cn.wnh.timerSask.MyTask2" /> <task:scheduled-tasks> <task:scheduled ref="myTask" method="taskSelf" fixed-rate="2000" /> </task:scheduled-tasks>
SpringTask가 구현이 더 간단합니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다.
Spring에서 타이밍 스케줄링을 구현하는 여러 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!