如何让Micronaut使用从Map到String的自定义TypeConverter?

时间:2019-07-17 13:18:30

标签: micronaut

我已经创建了Micronaut TypeConverter(在Kotlin中),用于将地图转换为@Scheduled的cron字符串,但是我无法让Micronaut进行转换。

作为示例,我要支持以下配置:

clean:
  cron:
    every: SUN
    at: 01:00:00

应该导致0 0 1 * * SUN的原因(或者类似的原因,我在使用这些cron字符串时总是会犯错误)。

因此,我在Kotlin中创建了一个实现此目的的类。 Micronaut会创建它的实例,但不会将其应用于转换:

@Singleton
class MapToCron : TypeConverter<Map<String, String>, String>

我尝试了其他类型(包括AnyMap<*, *>)都无济于事。

我还创建了一个@PropertiesConfiguration类,该类将该属性定义为字符串(我想需要告诉Micronaut该属性实际上是什么类型),然后将其注入到bean中以确保使用了所有东西(只是为了当然,没什么。

@ConfigurationProperties("clean")
class CleanConfiguration {
    var cron: String? = null
}

此:@Scheduled(cron = "\${clean.cron}")导致Could not resolve placeholder ${clean.cron}

为显示配置确实被拾取并且所有内容都连接在一起,@Scheduled(cron = "\${clean.cron.every}")指向Invalid cron expression [SUN],对于上述配置来说是正确的。

我在做什么错?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

配置中的自定义语法背后的动机是什么? 如果您仅使用标准的CRON语法,Micronaut会完美地使用它:

clean:
  cron: 0 0 1 * * SUN