quartz定時任務,已過期的內容自動下線
阿新 • • 發佈:2022-04-29
概念:
Quartz是一個開源的作業排程框架,可以讓計劃的程式任務一個預定義的日期和時間執行。Quartz可以用來建立簡單或複雜的日程安排執行幾十,幾百,甚至是十萬的作業數。
框架架構:
簡單例項:
maven引用:
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency>
配置檔案部分:
需要注意的是,配置檔案的部分並不是必須一成不變的,很多地方都有多種寫法
<!-- 配置Job類 --> <bean id="job_1" class="com.wazn.learn.scheduler.Job1" /> <!-- <bean id="jobFactory" class="com.wazn.learn.scheduler.BsQuartzJobFactory"></bean> --> <bean id="job1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="job_1" /> <property name="targetMethod" value="doJob1" /><!-- 類中要執行的方法名稱 --> <property name="concurrent" value="false" /> </bean> <!-- 排程觸發器 --> <bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="job1" /> <property name="cronExpression" value="0/5 * * * * ?" /> </bean> <!-- 排程工廠 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- <property name="jobFactory" ref="jobFactory"></property> --> <property name="triggers"> <list> <!-- 觸發器列表 有多少配多少--> <!-- <ref bean="cronTrigger1" /> --> </list> </property> </bean>
java定時任務類:
package com.wazn.learn.scheduler;
import java.util.Date;
public class Job1{
public void doJob1(){
System.out.println("定時任務開始執行:"+new Date().toLocaleString());
}
}
接下來是重頭戲,呼叫service:在呼叫service的過程中,因為沒有在實現的方法上加事務的註解,所以每到呼叫方法的時候就會報錯,後來加了事務就可以正常的呼叫方法了:
呼叫service的定時任務類:
package com.wazn.learn.scheduler;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import com.wazn.learn.service.teachclass.ClassService;
import com.wazn.learn.service.teachclass.ClassTestService;
import com.wazn.learn.service.teachclass.homework.HomeWorkService;
public class Job1{
@Autowired
private ClassTestService testservice;
@Autowired
private HomeWorkService homeservice;
@Autowired
ClassService classservice;
public void doJob1(){
System.err.println("定時任務開始執行:"+new Date().toLocaleString());
//testservice.updateStatus();
//homeservice.updateStatus();
classservice.updataStatusForEndtime();
}
}
方法的實現:
@Override
@Transactional
public int updataStatusForEndtime() {
try {
String hql ="update TeachClass set state = false where enddate<=now()";
int i=classdao.execute(hql, null,null);
return i;
}catch(Exception e) {
return 0;
}
}