gpt4 book ai didi

java - Spring 启动 : How to parameterize @Scheduled

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:20 28 4
gpt4 key购买 nike

我是 Spring 的新手,对它的功能只了解了皮毛。

我有一种情况需要使用 @Scheduled 注释来设置重复任务。速率被指定为对象中的成员字段,该对象传递给封装表示任务的方法的类。

我使用了允许访问配置或环境的机制,例如@Scheduled(fixedRateString = "${some.property:default}");这很好用。

我不知道如何将对象的值插入到 @Scheduled 中。

例如:

class MyClass {
private MyObject myObj;

public MyClass(MyObject myObj) {
this.myObj = myObj;
}

@Scheduled(fixedRateString = "${myObj.rate:5000}")
private void someTask() {
...
}
}

当然,上面的代码是行不通的,我只是举一个我正在尝试做的例子。

如有任何建议,我们将不胜感激。

最佳答案

是的,您可以使用 @Scheduled 注释通过 SpEL 表达式执行此操作(自 Spring 4.3.x 起可在 @Scheduled 注释上使用)。这是一个例子:

@Slf4j
@Configuration
@EnableScheduling
public class ExampleClass {

static class ScheduleCalculator {
public String calc() {
return "5000";
}
}

@Bean("scheduleCalculator")
public ScheduleCalculator createScheduleCalculator() {
return new ScheduleCalculator();
}

@Scheduled(fixedRateString = "#{scheduleCalculator.calc()}")
public void someTask() {
log.info("Hello world");
}
}

但是,仅仅因为您可以这样做并不意味着您一定应该这样做。

如果您使用 spring task scheduler,您的代码可能更容易被将来需要维护它的人遵循此外,您还可以控制用于调度的线程池,而不是依赖所有 @Scheduled 任务都集中在其中的共享执行器。

关于java - Spring 启动 : How to parameterize @Scheduled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734584/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com