Java和Springboot中带参数的任务调度

yv5phkfx  于 2022-12-12  发布在  Spring
关注(0)|答案(1)|浏览(143)

我有一个方法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年,但我想你明白的想法。
如有任何帮助,我将不胜感激

eiee3dmh

eiee3dmh1#

Spring v3.2.2在原来的3个长参数中添加了String参数来处理这个问题。fixedDelayStringfixedRateStringinitialDelayString现在也可用。

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

}

相关问题