Как разрешить Micronaut использовать пользовательский преобразователь типов из карты в строку?

Я создал Micronaut TypeConverter (в Котлине) для преобразования карты в строку cron для @Scheduled, но я не могу заставить Micronaut выполнять преобразования.

В качестве примера я хочу поддерживать следующий конфиг:

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

Что должно привести к 0 0 1 * * SUN (или что-то в этом роде, я продолжаю делать ошибки с этими строками cron).

Поэтому я создал класс в Котлине, который это реализует. Micronaut создает его экземпляр, но не применяет его для преобразования:

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

Я пробовал разные типы (в том числе Any и Map<*, *>) безрезультатно.

Я также создал класс @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], что правильно с учетом приведенной выше конфигурации.

Что я делаю не так? Спасибо за помощь.


person Jeroen Knoef    schedule 17.07.2019    source источник


Ответы (1)


Какова мотивация пользовательского синтаксиса в конфигах? Если вы просто используете стандартный синтаксис CRON, Micronaut безошибочно его улавливает:

clean:
  cron: 0 0 1 * * SUN
person akobor    schedule 20.09.2019
comment
Ну, конечно, это работает, и я не стал заниматься этим дальше. Мне просто больше нравится конфигурация, чем выражение cron. Кажется, я не могу вспомнить, где указать какой параметр, и, на мой взгляд, читабельность довольно плохая. Я понимаю, что я, вероятно, меньшинство в этом отношении. - person Jeroen Knoef; 20.09.2019