微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在注释参数/参数中使用@ConfigurationProperties? 必须是编译时常量

如何解决在注释参数/参数中使用@ConfigurationProperties? 必须是编译时常量

我正在尝试在注释中使用配置,如下所示:

@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}"
    )    

如果使用的属性占位符没有默认值和配置,将在运行时抛出异常,应用程序将关闭。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。