[英]Using fixedDelayString in spring-boot @Scheduled without putting the configuration property directly
這是我的問題。 我在一些方法之上使用@Scheduled
在我的 spring-boot 應用程序中執行一些常規任務。
為了配置計划,我使用fixedDelayString
和initialDelayString
arguments 到@Scheduled
,如下所示:
@Scheduled(
initialDelayString = "${my.wanted.delayInSeconds}",
fixedDelayString = "${my.wanted.delayInSeconds}"
)
哪個像它應該的那樣工作。
我現在遇到的問題是,在應用程序的屬性文件中,我必須將配置屬性設置為:
my.wanted.delayInSeconds=10
如果我對 spring 屬性使用任何其他受支持的案例,例如 kebab-case:
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 似乎沒有對fixedDelayString
和initialDelayString
占位符進行轉換。
問題是這似乎很容易破解。 我也在從通常的@ConfigurationProperties
class 中讀取相同的屬性。 所以 IntelliJ 一直建議我在屬性文件中使用 kebab-case 版本,即my.wanted.delay-in-seconds
。 我同意 - 那里更容易閱讀。 但如果我這樣做,應用程序將無法啟動。
所以我的問題是:有沒有辦法
謝謝!
正如上面@wjans 評論所指出的,實現我想要的正確方法是使用 SEL 從我的屬性 bean 中獲取 bean 屬性並在@Scheduled
參數中使用它。
像這樣:
@Scheduled(
initialDelayString = "#{@myProps.getSchedulingDelayMillis()}",
fixedDelayString = "#{@myProps.getSchedulingDelayMillis()}"
)
這將從屬性 class 中提取延遲字符串,因此您可以將所需的任何內容綁定到該屬性並使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.