HDNew 2017-05-03 08:06
浏览 1715
已结题

如何关闭SchedulerFactoryBean中的一个任务triggers

配置文件中有如下配置:

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false">
    <property name="triggers"> 
        <list>
            <ref local="customCronTrigger" />
        </list>
    </property>
</bean>
<!-- 自定义触发器 -->
<bean id="customCronTrigger" class="com.gilight.dep.metadata.web.util.CustomCronTrigger">
    <property name="jobDetail" ref="myJobDetail" /> 
    <property name="initBackupTimeService" ref="initBackupTimeService"></property>
</bean>
<!-- 动态jobDetail备份系统 -->
<bean id="myJobDetail"  
      class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject">
        <ref bean="systemBackupService" />
    </property>
    <property name="targetMethod" value="backupSystem" />
    <property name="concurrent" value="false" />
</bean> 

现在要实现一个改变定时任务的功能,需要在控制类中关闭原来的triggers,查源码发现,关闭triggers的方法在SchedulerFactoryBean中,是stop();但是在控制类中如何注入这个原来 的SchedulerFactoryBean使其关闭呢?
我写的是这样;但是不可以,会报一个类型转换异常的错StdScheduler cannot be cast to SchedulerFactoryBean

public class SystemBackupController extends MetadataBaseController{

private SchedulerFactoryBean schedulerFactoryBean;//实现类无法bean注入?????
private CustomCronTrigger customCronTrigger;
private ISystemBackupService systemBackupService;
private IInitBackupTimeService initBackupTimeService;

private String backupTime;//前台时间
private Trigger[] triggers;

/*get,set方法省略*/


@RequestMapping(value = "/start", method = RequestMethod.POST)
public void start(@RequestBody String json,HttpServletRequest request) throws ParseException {

    System.out.println(json);
    Map<String, Object> map = (Map<String, Object>) JSON.parse(json);
    backupTime = (String) map.get("backupTime");
    System.out.println(backupTime);

    ApplicationContext sac = RequestContextUtils.getWebApplicationContext(request);
    ConfigurableApplicationContext context = (ConfigurableApplicationContext) sac;

    //Bean的实例工厂  
    DefaultListableBeanFactory dbf = (DefaultListableBeanFactory) context.getBeanFactory(); 
    schedulerFactoryBean =(SchedulerFactoryBean) dbf.getBean("schedulerFactoryBean");

    String cronExpression = customCronTrigger.getCronExpression();// 原触发器的时间
    saveBackupTime(backupTime);
    if (cronExpression != backupTime) {
        schedulerFactoryBean.stop();
        customCronTrigger.setCronExpression(backupTime);
        triggers[0] = customCronTrigger;
        schedulerFactoryBean.setTriggers(triggers);
        schedulerFactoryBean.start();
    }

}
public void saveBackupTime(String backupTime) {
    systemBackupService.saveBackupTime(backupTime);
}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容
    • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题