Spring 如何使Quartz调度程序处于待机状态
我使用spring实现了quartz作业。我的调度程序运行良好,作业得到完美执行。 我的问题是如何使此计划程序处于待机状态?这样,一旦我决定将调度程序置于待机模式,就不会触发任何作业。 下面是职业分类Spring 如何使Quartz调度程序处于待机状态,spring,quartz-scheduler,Spring,Quartz Scheduler,我使用spring实现了quartz作业。我的调度程序运行良好,作业得到完美执行。 我的问题是如何使此计划程序处于待机状态?这样,一旦我决定将调度程序置于待机模式,就不会触发任何作业。 下面是职业分类 public class MyJobClass extends QuartzJobBean { //my job logic } applicationContext_Scheduler.xml中的代码段 <bean name="myJobBean" class="org.spring
public class MyJobClass extends QuartzJobBean {
//my job logic
}
applicationContext_Scheduler.xml中的代码段
<bean name="myJobBean"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="MyJobClass" />
</bean>
<bean id="rsHourlyJobCronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="myJobBean" />
<property name="cronExpression" value="00 0/1 * * * ?" />
</bean>
而不是用xml创建调度器bean。我将按以下程序制作:
@Configuration
public class QuartzSchedulerConfiguration {
@Autowired
private ApplicationContext applicationContext;
@Bean
public JobFactory jobFactory() {
ApplicationContextHolder jobFactory = new ApplicationContextHolder();
jobFactory.setApplicationContext(applicationContext);
return jobFactory;
}
@Bean
public SchedulerFactoryBean schedulerFactory() {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
factory.setAutoStartup(true);
factory.setSchedulerName("Quartz Scheduler");
factory.setOverwriteExistingJobs(true);
factory.setJobFactory(jobFactory());
return factory;
}
}
@Component
public final class ApplicationContextHolder extends SpringBeanJobFactory implements ApplicationContextAware {
private static ApplicationContext context;
private transient AutowireCapableBeanFactory beanFactory;
@Override
public void setApplicationContext(ApplicationContext ctx) throws BeansException {
beanFactory = ctx.getAutowireCapableBeanFactory();
context = ctx;
}
@Override
protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception {
final Object job = super.createJobInstance(bundle);
beanFactory.autowireBean(job);
return job;
}
public static ApplicationContext getContext() {
return context;
}
}
这将创建具有应用程序上下文意识的quartz调度程序bean,允许您将spring对象自动连接到quartz作业中
然后创建一些调度服务,如:
@Service
public class SchedulerService {
@Autowired
private SchedulerFactoryBean schedulerFactory;
private Scheduler scheduler;
@PostConstruct
private void init() {
scheduler = schedulerFactory.getScheduler();
}
public void standBy() throws Exception {
if (scheduler != null && !scheduler.isInStandbyMode()) {
scheduler.standby();
}
}
}
然后添加计划所需的其他方法。谢谢Issac。我使用SchedulerFactoryBean让scheduler对象控制“启动”和“待机”模式