quartz集成spring

導入maven座標

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>

applicationContext.xml配置

<!--配置job(自定義的job任務類)-->
<bean id="promotionJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
        <property name="jobClass" value="com.ikayaki.bos.quartz.PromotionJob" />
    </bean>
 <!--配置trigger,常用cronTrigger,更靈活cronTragger時間配置:7個
                    秒:0-59
                    分: 0-59
                    時: 0-23
                    月中的天: 0-31
                    月:0-11
                    週中的天:1-7
                    ?:不確定,未知
                    / :每 eg: 秒:*/5 : 每5秒執行一次--> 
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="promotionJob" />
        <property name="startDelay" value="0" />
        <property name="repeatInterval" value="60000" />
    </bean>
 <!--配置Scheduler啓動定時器,將所有需要啓動或管理的定時器均配置在list標籤下-->      
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobFactory" ref="jobFactory" />
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>
</beans>

導入jobFactory

package com.ikayaki.bos.quartz;

import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Service;

@Service("jobFactory")
public class JobFactory extends AdaptableJobFactory {

    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle)
            throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

編寫job

package com.ikayaki.bos.quartz;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

import com.ikayaki.bos.service.take_delivery.PromotionService;

public class PromotionJob implements Job {
    @Autowired
    private PromotionService promotionService;

    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        System.out.println("活動過期處理程序執行....");
        // 每分鐘執行一次,當前時間 大於 promotion數據表 endDate, 活動已經過期,設置status='2'
        promotionService.updateStatus(new Date());
    }
}

編寫service和dao

    @Override
    public void updateStatus(Date date) {
        promotionRepository.updateStatus(date);
    }

    package com.ikayaki.bos.dao.take_delivery;

import java.util.Date;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import com.ikayaki.bos.domain.take_delivery.Promotion;


public interface PromotionRepository extends JpaRepository<Promotion, Integer> {

    @Query("update Promotion set status='2' where endDate<? and status='1'")
    @Modifying
    void updateStatus(Date now);

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章