相关疑难解决方法(0)

如何在Spring中使用EnableScheduling注释在运行时重新启动计划任务?

我一直在研究如何使用Java 8和spring在运行时更改作业的频率.这个问题非常有用,但并没有完全解决我的问题.

我现在可以配置下次执行作业的日期.但是如果将延迟设置为1年,那么我需要在考虑新配置之前等待1年.

我的想法是在配置值发生变化时停止计划任务(所以从另一个类开始).然后在下次执行任务时重新计算.也许有一种更简单的方法可以做到这一点.

这是我到目前为止的代码.

@Configuration
@EnableScheduling
public class RequestSchedulerConfig implements SchedulingConfigurer {

    @Autowired
    SchedulerConfigService schedulerConfigService;

    @Bean
    public RequestScheduler myBean() {
        return new RequestScheduler();
    }

    @Bean(destroyMethod = "shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(100);
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
        taskRegistrar.addTriggerTask(
                new Runnable() {
                    @Override public void run() {
                        myBean().startReplenishmentComputation();
                    }
                },
                new Trigger() {
                    @Override public Date nextExecutionTime(TriggerContext triggerContext) {
                        Duration d = schedulerConfigService.getIntervalFromDB();
                        return DateTime.now().plus(d).toDate();
                    }
                }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我想做的事情.

@RestController
@RequestMapping("/api/config/scheduler")
public …
Run Code Online (Sandbox Code Playgroud)

java jobs spring scheduled-tasks java-8

13
推荐指数
1
解决办法
9479
查看次数

标签 统计

java ×1

java-8 ×1

jobs ×1

scheduled-tasks ×1

spring ×1