Читать класс из Zookeeper (путь с подчеркиванием) в приложении Spring Boot

Мы храним в узлах Zookeeper некоторую стандартную конфигурацию для нескольких случаев. Это плоский список простых значений (строковых, логических, целочисленных и т. Д.). Итак, пока у нас есть класс, описывающий эту конфигурацию, с соответствующими полями и заполняющий его экземпляры с помощью аннотации ConfigurationProperties с разными префиксами.

class DatasourceConfig {
   var pid: String? = null
   var className: String? = null
   var poolSize: Int = 30
   var minIdle: Int = 10
   var maxIdle: Int = 10
   var conTimeout: Long = 100500
   ...
}

Проблема в том, что теперь нам нужно прочитать несколько экземпляров этой конфигурации из узла с подчеркиванием в пути. ConfigurationProperties не поддерживает регистр змеи или верблюда в префиксе, только регистр шашлыка.

    @ConfigurationProperties(prefix = "smth.new_path.datasources.aaa")
    fun aaaDataSourceConfig() = DatasourceConfig()

    @ConfigurationProperties(prefix = "smth.new_path.datasources.bbb")
    fun bbbDataSourceConfig() = DatasourceConfig()

это приводит к ошибке:

APPLICATION FAILED TO START
***************************

Description:

Configuration property name 'new_path' is not valid:

    Invalid characters: '_'
    Reason: Canonical names should be kebab-case ('-' separated), lowercase alpha-numeric characters and must start with a letter

Нет возможности переименовать узел. Это не вариант.

Корневой узел Zookeper устанавливается с помощью spring.cloud.zookeeper.config.root в bootstrap.yml, и я предполагаю, что Spring Cloud Zookeeper используется для чтения значений. Если я установлю для этого корня значение «new_path», ConfigurationProperties будет работать, но мне также понадобятся значения из других путей в моем приложении.

Список конфигурации довольно длинный и используется несколько раз, поэтому я бы не хотел использовать аннотацию @Value для каждого атрибута.

Есть ли другой способ, кроме ConfigurationProperties, или, может быть, какой-либо способ настроить ConfigurationProperties или Spring Cloud Zookeeper, чтобы они работали вместе?


person marlett    schedule 02.03.2020    source источник


Ответы (1)


Оказывается, проблем не было: переименовывать узел Zookeeper не нужно.

ConfigurationProperties использует ослабленную привязку, поэтому, хотя префикс должен быть в кебабе, например new-path, он по-прежнему будет правильно работать с узлами с именами, такими как new_path или newPath.

Описано здесь: https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config-relaxed-binding

person marlett    schedule 04.03.2020