Читайте класс из Zookeeper (путь с подчеркиванием) в приложении Spring Boot - PullRequest
0 голосов
/ 02 марта 2020

Мы храним в узлах Zookeeper некоторую стандартную конфигурацию для нескольких случаев. Это простой список простых значений (string, boolean, integer et c). Итак, на данный момент у нас есть класс, описывающий этот конфиг, с соответствующими полями, и мы заполняем его экземпляры, используя аннотацию 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 root узел устанавливается с помощью spring.cloud.zookeeper.config. root в bootstrap .yml, и я думаю, что Spring Cloud Zookeeper используется для чтения значений. Если для этого root установить значение "new_path", ConfigurationProperties будет работать, но мне также понадобятся значения из других путей в моем приложении.

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

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

1 Ответ

0 голосов
/ 04 марта 2020

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

ConfigurationProperties использует расслабленное связывание, поэтому, хотя префикс должен быть в случае kebab, как и 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

...