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

标签 java spring scheduled-tasks quartz-scheduler

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

最佳答案

在spring boot中,可以直接使用一个应用属性!

例如:

@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds}000")
private void process() {
    // your impl here
}

请注意,如果未定义属性,您也可以设置默认值,例如设置默认值“60”(秒):

@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds:60}000")

我发现的其他东西:

  • 方法必须是无效的
  • 方法不能有参数
  • 方法可能是private

我发现能够方便地使用 private 可见性并以这种方式使用它:

@Service
public class MyService {
    public void process() {
        // do something
    }

    @Scheduled(fixedDelayString = "${my.poll.fixed.delay.seconds}000")
    private void autoProcess() {
        process();
    }
}

作为 private,计划的方法可以在您的服务本地,而不是成为您的服务 API 的一部分。

此外,这种方法允许 process() 方法返回一个值,而 @Scheduled 方法可能不会。例如,您的 process() 方法可能如下所示:

public ProcessResult process() {
    // do something and collect information about what was done
    return processResult; 
}

提供一些关于处理过程中发生的事情的信息。

关于java - 如何在运行时更改 Spring 的 @Scheduled fixedDelay?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250928/

相关文章:

windows - 如何测试启动 powershell 脚本的内容

java - 如何检查日期是否在特定范围内?

java - 我想改变jframe的标题。我想使用 jMenu2 设置的值

java - Spring 启动和 hibernate 。自动创建日期

java - 调用entityManager.flush - 调用两次、一次或根本不调用的效果

windows - SchTasks/Delete 是同步操作吗?

java - Hibernate数据一致性

Java - 反射 - 如何使用反射获取@RequestHeader值

java - 升级到 Spring 3 后启动缓慢

c# - 设置 Topshelf 和 Quartz.Net 控制台应用程序时从 Ninject 访问对象