【问题标题】:Scheduling task with parameters in Java and SpringbootJava和Springboot中带参数的调度任务
【发布时间】:2022-12-17 14:08:54
【问题描述】:

我有一个方法doSomething(a, x),我想提前 x 小时安排。我尝试了多种设置,但似乎都失败了。谁能告诉我一个服务结构或 springboot 功能可以完成这个同时也是可测试的?

这是我当前在 java 和 springboot 中的设置失败了,因为 fixedDelay 不是常量,因为我不希望我的测试延迟 x 小时。

此代码的预期结果是: a 在 x 小时后打印

服务:

@Service
public class SomeService{

    public void doSomething(int a, long x) {
        SchedulerService scheduler = new SchedulerService(a, x, this);
        scheduler.doSomethingWithA();
    }

    public void doSomethingWithA(int a) {
        System.out.println(a);
    }

}

调度程序:

@AllArgsConstructor
public class SchedulerService {

    private int a;
    private final long x;

    private transient SomeService someService;

    @Scheduled(fixedDelay = x)
    public void doSomethingWithA() {
        someService.doSomethingWithA(a);
    }

}

当然,实际的服务在数据库访问等方面要复杂得多,x 小时实际上是 10 年,但我想你明白了。

任何帮助将不胜感激

【问题讨论】:

    标签: java spring-boot scheduled-tasks


    【解决方案1】:

    Spring v3.2.2 在原有的 3 个长参数的基础上增加了 String 参数来处理这个问题。 fixedDelayStringfixedRateStringinitialDelayString 现在也可用。

    @Scheduled(fixedDelayString = "${my.fixed.delay.prop}")
    public void doSomethingWithA() {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多