Java 在spring boot@Scheduled中使用fixedDelayString,而不直接放置配置属性

Java 在spring boot@Scheduled中使用fixedDelayString,而不直接放置配置属性,java,spring,spring-boot,scheduled-tasks,Java,Spring,Spring Boot,Scheduled Tasks,这是我的问题。在spring boot应用程序中,我在一些方法的基础上使用了@Scheduled 为了配置计划,我将使用fixedDelayString和initialDelayString参数对@Scheduled进行如下配置: @Scheduled( initialDelayString = "${my.wanted.delayInSeconds}", fixedDelayString = "${my.wanted.delayInSeco

这是我的问题。在spring boot应用程序中,我在一些方法的基础上使用了
@Scheduled

为了配置计划,我将使用
fixedDelayString
initialDelayString
参数对
@Scheduled
进行如下配置:

@Scheduled(
      initialDelayString = "${my.wanted.delayInSeconds}",
      fixedDelayString = "${my.wanted.delayInSeconds}"
  )
这是应该的

我现在遇到的问题是,在应用程序的属性文件中,我必须将配置属性设置为:

my.wanted.delayInSeconds=10
如果我对spring属性使用任何其他受支持的案例,例如kebab案例:

my.wanted.delay-in-seconds=10
应用程序无法启动,出现异常:

Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'myMethod': Could not resolve placeholder 'my.wanted.delayInseconds' in value "${my.wanted.delayInSeconds}"
这是有意义的,因为该值没有定义&spring似乎没有对
fixeddelaysting
&
initialDelayString
占位符进行转换

问题是,这似乎很容易打破。我也在从一个普通的
@ConfigurationProperties
类中读取相同的属性。因此IntelliJ一直建议我在属性文件中使用烤肉盒版本,即
my.wanted.delay in seconds
。我也同意,在那里阅读更容易。但如果我这样做,应用程序将无法启动

所以我的问题是:有没有办法

  • 或者,让spring进行常规转换,以便烤肉串也能工作
  • 或者,从配置属性类提供延迟字符串,而不是直接使用属性

谢谢

正如上面@wjans评论所指出的,实现我想要的正确方法是使用SEL从我的properties bean获取bean属性&在
@Scheduled
参数中使用它

像这样:

预定的( initialDelayString=“#{@myProps.getSchedulingDelayMillis()}”, fixedDelayString=“#{@myProps.getSchedulingDelayMillis()}” )
这将从properties类中提取延迟字符串,因此您可以将任何需要的内容绑定到该属性并使用它。

这里提供的答案如何?就这么简单!谢谢@wjans。如果你不介意从中做出正确的回答,我不介意接受:)