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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?