版本:quartz 2.2
spring 4.3
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"
>
<!-- ======================= scheduler ========================= -->
<bean id="importTourGroupsScheduler" class="com.yimayhd.carpool.schedule.ImportTourGroupsScheduler" />
<!-- ======================= job detail ========================= -->
<bean id="importTourGroupsSchedulerBean"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="importTourGroupsScheduler"></property>
<property name="targetMethod" value="execute"></property>
<property name="concurrent" value="false" />
</bean>
<!-- ======================= quartz Cron Trigger ========================= -->
<bean id="importTourGroupsSchedulerCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" >
<ref bean="importTourGroupsSchedulerBean"/>
</property>
<property name="cronExpression" value="${scheduler.tourGroup}" />
</bean>
<!-- ======================= Scheduler Factory ========================= -->
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="importTourGroupsSchedulerCronTrigger" />
</list>
</property>
</bean>
</beans>
public class ImportTourGroupsScheduler {
private Logger logger = LoggerFactory.getLogger(ImportTourGroupsScheduler.class);
@Autowired
private TourGroupManager tourGroupManager;
public void execute() {
doWork();
}
private void doWork() {
logger.info(" import tourGroups from erp " + JSON.toJSONString(new Date()));
try {
logger.info("tourGroupManager.importTourGroup========== start=============");
BaseResult<TourGroupDO> baseResult = tourGroupManager.importTourGroupFromERP();
if (!baseResult.isSuccess()) {
logger.error("import tourGroups from erp to carcar failed!");
}
logger.info("tourGroupManager.importTourGroup========== end=============");
} catch (Exception e) {
logger.error("doWork", e);
}
}
}
如果spring是4.1以下,trigger的配置就需要替换为
<bean id="cacheBoothSchedulerCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="cacheBoothSchedulerBean"></property>
<property name="cronExpression" value="${scheduler.cache.booth}" />
</bean>
这是因为spring4.1以上的版本中,去掉了CronTriggerBean类,而且jobDetail由类改成了接口,所以jobDetail的实例化方式也需要修改。
4.1以下版本
public class CronTriggerBean extends CronTrigger implements JobDetailAwareTrigger, BeanNameAware, InitializingBean {
private static final Constants constants = new Constants(CronTrigger.class);
private JobDetail jobDetail;
public CronTriggerBean() {
}
...
}
public class CronTrigger extends Trigger {
public void setCronExpression(String cronExpression) throws ParseException {
TimeZone origTz = this.getTimeZone();
this.cronEx = new CronExpression(cronExpression);
this.cronEx.setTimeZone(origTz);
}
...
}
public class JobDetail implements Cloneable, Serializable {
...
public JobDetail() {
this.group = "DEFAULT";
this.volatility = false;
this.durability = false;
this.shouldRecover = false;
this.jobListeners = new LinkedHashSet();
this.key = null;
}
...
}
4.1以上版本
public class CronTriggerFactoryBean implements FactoryBean<CronTrigger>, BeanNameAware, InitializingBean {
...
private JobDetail jobDetail;
private String cronExpression;
private CronTrigger cronTrigger;
...
}
public interface JobDetail extends Serializable, Cloneable {
...
}