Мы храним в узлах 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, чтобы он работал вместе?