導入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);
}