Замена библиотеки конфигурации с открытым исходным кодом cfg4j - PullRequest
0 голосов
/ 12 апреля 2019

В настоящее время я пытаюсь заменить нашу текущую библиотеку конфигурации, которая очень проста, выполняет основную работу и заменяет ее на решение с открытым исходным кодом cfg4j. Причина, по которой мы идем дальше, заключается в следующем:

  1. Текущая общая конфигурация, разработанная несколько лет назад, когда мы переходим в kubernetes, мы хотим удалить файл .properties. Конфигурация теперь определена в ansible-развертывании и ansible-среде, мы хотим отсоединить ее.

  2. Поскольку я впервые заменяю старую библиотеку новой и работаю с библиотекой с открытым исходным кодом.

Я планирую поместить файл application.properties в проект и локально проверить, может ли этот сервис считывать конфигурацию с помощью cfg4j.

Ниже приведен класс конфигурации, который я хочу редактировать (закомментированы строки, над которыми я работаю):

@Configuration
@PropertySource(
        value = {
            "file:${absoluteConfigDir:/etc/absolute}/operation.properties",
            "classpath:dds-dead-letter-service.properties",
            "file:${absoluteConfigDir:/etc/absolute}/dds-dead-letter-service.properties"
        },
        ignoreResourceNotFound = true)
@ImportResource("classpath*:commonContext.xml")
public class PropertyConfig {
    /*
   @Bean
    public ConfigurationSource configurationSource(){
        return new FilesConfigurationSource();
    }

    @Bean
    public ConfigurationProvider configurationProvider(ConfigurationSource source) {
        return new ConfigurationProviderBuilder().withConfigurationSource(source).build();
    }
   */
    @Bean
    public ConfigurationReaderFactory configurationReaderFactory() {
        return new ConfigurationReaderFactory();
    }

    @Bean
    public NewConfigurationReader configurationReader(ConfigurationReaderFactory factory) {
        return factory.getConfigurationReader(ConfigurationReaderType.EXTERNAL);
    }

    @Bean("localConfigurationReader")
    public NewConfigurationReader localConfigurationReader() {
        return new PropertyConfigurationReader("dds-dead-letter-service.properties");
    }
} 

Я думаю, что могу заменить NewConfigurationReader на ConfigurationProvider, но я не совсем уверен насчет ConfigurationReaderFactory.

Это реализация класса ConfigurationReaderFactory:

public class ConfigurationReaderFactory {
    /**
     * To accommodate Spring this method is not static.
     *
     * @param readerType The configuration reader type
     * @return An instance of a configuration reader
     */
    public NewConfigurationReader getConfigurationReader(final ConfigurationReaderType readerType) {

        NewConfigurationReader reader;

        switch (readerType) {
            case PROPERTIES:
                reader = new PropertyConfigurationReader();
                break;
            case EXTERNAL:
                reader = new ExternalPropertyConfigurationReader();
                break;
            case REFRESHABLE:
                reader = new RefreshableConfigurationReader();
                break;
            default:
                throw new IllegalArgumentException("Unsupported ConfigurationReaderType.");
        }

        return reader;
    } 

Я читал документ cfg4j, но, похоже, у него нет фабричного класса (http://www.cfg4j.org/releases/latest/#users-guide). Каков будет мой следующий шаг в замене этих методов? Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...