有没有一种方法可以在Spring的@Scheduled cron配置中从propertyClass调用getter(甚至是变量)?以下内容无法编译:
@Scheduled
cron
@Scheduled(cron = propertyClass.getCronProperty()) 要么 @Scheduled(cron = variable)
@Scheduled(cron = propertyClass.getCronProperty())
@Scheduled(cron = variable)
我想避免直接获取该属性:
@Scheduled(cron = "${cron.scheduling}")
简短的回答-开箱即用是不可能的。
@Scheduled注释中作为“ cron表达式”传递的值在ScheduledAnnotationBeanPostProcessor类中使用StringValueResolver接口的实例进行处理。
ScheduledAnnotationBeanPostProcessor
StringValueResolver
StringValueResolver有3种开箱即用的实现-用于Placeholder(例如$ {}),用于Embedded值和用于Static字符串-都无法实现您想要的结果。
Placeholder
Embedded
Static
如果您必须不惜一切代价避免在注释中使用属性占位符,请摆脱注释并以编程方式构造所有内容。您可以使用来注册任务ScheduledTaskRegistrar,这@Scheduled实际上是注释的作用。
ScheduledTaskRegistrar
我将建议使用能通过并通过测试的最简单的解决方案。