1. 程式人生 > 其它 >quartz定時任務,已過期的內容自動下線

quartz定時任務,已過期的內容自動下線

概念:

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;
        }
    }