问题描述
我正在尝试在注释中使用配置,如下所示:
@ConfigurationProperties("scheduling")
interface SchedulingConfiguration {
val initialDelay: String
val fixedDelay: String
}
@Singleton
class Worker(
private val configuration: SchedulingConfiguration,) {
private val log = LoggerFactory.getLogger(javaClass)
@Scheduled(initialDelay = configuration.initialDelay,fixedDelay = configuration.fixedDelay)
fun fetchQueueEntry() {
log.info("Fetching entry")
}
}
我收到警告 An annotation argument must be a compile-time constant
。
有什么方法可以让 Micronaut 做到这一点吗?
解决方法
我通过浏览 Micronaut 文档并偶然发现属性占位符来设法让它运行。即使感觉不是“最佳”,这也能正常工作。
@Singleton
class Worker {
private val log = LoggerFactory.getLogger(javaClass)
@Scheduled(
initialDelay = "\${scheduling.initialDelay}",fixedDelay = "\${scheduling.fixedDelay}"
)
fun fetchQueueEntry() {
log.info("Fetching entry")
}
}
如果配置文件或环境变量中不存在键,也可以定义将使用的默认值:
@Scheduled(
initialDelay = "\${scheduling.initialDelay:0s}",fixedDelay = "\${scheduling.fixedDelay:10s}"
)
如果使用的属性占位符没有默认值和配置,将在运行时抛出异常,应用程序将关闭。