81,122
社区成员




<bean id="autoRepeatRequestTask"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass">
<value>com..job.AutoRequestRepeatJob</value>
</property>
<property name="durability" value="true" />
<property name="requestsRecovery" value="true" />
</bean>
<!-- 定义触发时间 -->
<bean id="autoRepeatRequestDoTime"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="autoRepeatRequestTask" />
</property>
<!-- cron表达式 -->
<property name="cronExpression">
<value>0 * * * * ?</value>
<!--每分钟执行一次 -->
</property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuartz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
destroy-method="destroy">
<property name="configLocation" value="classpath:quartz.properties" />
<property name="triggers">
<list>
<ref bean="autoRepeatRequestDoTime" />
</list>
</property>
<property name="startupDelay" value="10" />
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
</bean>
@PersistJobDataAfterExecution
@DisallowConcurrentExecution // 不允许并发执行
public class AutoRequestRepeatJob extends QuartzJobBean {
private static final Logger LOGGER = LoggerFactory.getLogger(AutoRequestRepeatJob.class);
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println(Thread.currentThread().getName()+"------初始化了"+DateTimeUtils.getNowHHmmss());
RequestRepeatService requestRepeatService = getApplicationContext(context).getBean(RequestRepeatService.class);
requestRepeatService.autoRepeatRequest();
}
private ApplicationContext getApplicationContext(final JobExecutionContext jobexecutioncontext) {
try {
return (ApplicationContext) jobexecutioncontext.getScheduler().getContext().get("applicationContextKey");
} catch (SchedulerException e) {
LOGGER.error("jobexecutioncontext.getScheduler().getContext() error!", e);
throw new RuntimeException(e);
}
}
}