作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 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/
我是一名优秀的程序员,十分优秀!