quartz集成spring

来源:互联网 发布:java web开发实战 编辑:程序博客网 时间:2024/06/08 05:39

导入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);}
原创粉丝点击