相关疑难解决方法(0)

如何在运行时更改Spring的@Scheduled fixedDelay

我需要以固定的间隔运行批处理作业,并能够在运行时更改此批处理作业的时间.为此,我遇到了Spring框架下提供的@Scheduled注释.但我不确定如何在运行时更改fixedDelay的值.我做了一些谷歌搜索,但没有找到任何有用的东西.

java spring scheduled-tasks quartz-scheduler

27
推荐指数
4
解决办法
6万
查看次数

如何在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
查看次数

Spring Boot:从数据库获取@Scheduled cron值

我正在使用Spring Boot并且在调度cron task数据库中存在的使用值时遇到问题.

暂时,我正在读取属性文件中的值,如下所示:

@Scheduled(cron= "${time.export.cron}")
public void performJob() throws Exception {
   // do something
}
Run Code Online (Sandbox Code Playgroud)

这很好用,但我没有从属性文件中获取值,而是想从数据库表中获取它们.有可能吗?怎么样?

java cron scheduled-tasks spring-boot

12
推荐指数
1
解决办法
2万
查看次数

在SpringBoot @Scheduled中更新Cron表达式

我约有@Scheduled和一个硬编码的cron表达式安排了约10个工作,如下所示:

@Scheduled(cron = "* * 1 * * *")
public void testMethod(){
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够通过数据库更新此cron表达式,并在运行时重新计划特定的作业。

有谁知道该怎么做?

谢谢

java spring scheduled-tasks

7
推荐指数
1
解决办法
5431
查看次数

在Spring中如何使用Java常量作为@Scheduler表达式注释的一部分?

我正在使用Spring Scheduler,如下所示。

 @Scheduled(fixedDelay = ((10 * 60 * 1000) / 2))
    public void runDynamic()
    {
      //doing my stuff
    }
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个这样的常数

public static final Integer VARIANCE_TIME_IN_MIN = 10;
Run Code Online (Sandbox Code Playgroud)

我想将此常量用作表达式的一部分,如下所示:

@Scheduled(fixedDelay = ((MyConstants.VARIANCE_TIME_IN_MIN * 60 * 1000) / 2))
public void runDynamic()
{
//doing my stuff
}
Run Code Online (Sandbox Code Playgroud)

但这给了我编译时错误。有任何想法吗?提前致谢..!

java spring annotations constants

3
推荐指数
1
解决办法
3062
查看次数

不兼容的类型。找到:'org.springframework.beans.factory.annotation.Value',必需:'long'

我有一个调度程序来清理数据库

@Scheduled(fixedDelay = @Value("#{new Long('${clean_up.period}')}"))
public void cleanStatInfoTable() {
    List<StateInfo> infoLis=stateInfoRepository.findAllByCreatedDateBefore(LocalDateTime.now().minusHours(1));
    stateInfoRepository.deleteInBatch(infoLis);
}
Run Code Online (Sandbox Code Playgroud)

但它会产生编译错误

不兼容的类型。找到:'org.springframework.beans.factory.annotation.Value',必需:'long'

我也尝试了表格, @Scheduled(fixedDelay = @Value("${obi.payments.state_info.clean_up.period}")) 但仍然是同样的问题

如何将long值注入到注释fixedDelay中的属性中Scheduled

java spring inject

3
推荐指数
1
解决办法
1948
查看次数

从数据库设置Spring @Scheduled的配置值

已使用注释了某些方法@Scheduled(fixedDelay=/.../),如何从数据库中获取该值?
已经具有所需的服务和存储库,只是不确定如何在此处应用该值。

spring spring-mvc spring-scheduled

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