2016-02-09 2 views
4

Каков правильный способ чтения конфигурации в dropwizard из чего-то вроде базы данных или вызова REST? У меня есть прецедент, когда я не могу иметь yml-файл с некоторыми значениями и должен получать настройки/конфиг во время запуска с предварительно настроенного URL-адреса с помощью вызовов REST.dropwizard: прочитать конфигурацию из источника, отличного от файла

Можно ли просто вызвать эти вызовы REST в методах get класса ApplicationConfiguration?

ответ

5

Similar to my answer here, вы реализовать интерфейс ConfigurationSourceProvider так, как вы хотите внедрить и настроить приложение dropwizard, чтобы использовать его на своем классе приложений с помощью:

@Override 
public void initialize(Bootstrap<MyConfiguration> bootstrap){ 
    bootstrap.setConfigurationSourceProvider(new MyDatabaseConfigurationSourceProvider()); 
} 

По умолчанию InputStream вы возвращение читается как YAML и отображается на объект Configuration. The default implementation

Вы можете изменить это с помощью

bootstrap.setConfigurationFactoryFactory(new MyDatabaseConfigurationFactoryFactory<>()); 

Тогда у вас есть FactoryFactory :), возвращающее Factory, который считывает InputStream и возвращает свой Configuration.

public T build(ConfigurationSourceProvider provider, String path { 
    Decode.onWhateverFormatYouWish(provider.open(path)); 
} 
+0

Спасибо! Таким образом, похоже, что я должен вернуть входной поток в файл YAML из этой реализации. То есть, читайте свойства из БД, сохраняйте в ямле, а затем возвращайте к нему дескриптор. Несколько неудобно, но должно работать, я думаю. – ragebiswas

+1

Я не понимал, что возвращает InputStream. Согласен, это несколько неудобно. Похоже, вы также можете настроить способ обработки «InputStream». Это все еще немного утомительно, так как вам все еще нужно работать с 'InputStream', но по крайней мере вы можете работать в памяти. Я уточню свой ответ. – Natan

3

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

Что-то вроде:

@Override 
public void initialize(Bootstrap<MyRestApplicationConfiguration> bootstrap) { 
    bootstrap.setConfigurationSourceProvider(new UrlConfigurationSourceProvider()); 
} 
+0

Спасибо Даниэле - жаль, что я не смог ответить на оба ответа. Переход с Natan с моего URL точно не возвращает YAML - мне нужно его обработать. – ragebiswas