Microprofile Config с использованием динамических config-ключей - PullRequest
0 голосов
/ 07 сентября 2018

В настоящее время я ищу способ динамической сборки ключей конфигурации (обработка отката), а затем искать их в наших файлах microprofile-config.properties.Такой файл может выглядеть так:

# customer fallbacks

my.config=1234                            # use this fallback when there is no customer
customer2.my.config=12345                 # use this fallback when there is no subcustomer
customer2.subCustomer1.my.config=123456   # first level

Поэтому, когда есть клиент и субклиент, используйте on

. Причина, по которой я получил эту проблему, заключается в том, что я хотел быиспользуйте аннотацию @ConfigProperty, поэтому не используйте ConfigProvider.getConfig ().Это означает, что мне придется собрать мой динамический конфигурационный ключ внутри моего пользовательского ConfigSource.

. Я знаю, что ConfigSources загружаются при запуске сервера через ServiceLoader.Поэтому я попытался удалить существующую конфигурацию и заменить ее своей пользовательской конфигурацией:

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;

import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.spi.ConfigProviderResolver;

@Startup
@Singleton
public class StartupConfigurationRegistrar{

@PostConstruct
private void registerConfig() {
        final Config customConfig = ConfigProviderResolver.instance().getBuilder().withSources(new FallbackHandlingConfiguration(myReqiredVariables)).addDefaultSources().build();
        ConfigProviderResolver.instance().releaseConfig(ConfigProviderResolver.instance().getConfig());
        ConfigProviderResolver.instance().registerConfig(customConfig, Thread.currentThread().getContextClassLoader());
    }
}

Мой ConfigSource добавлен правильно.Но позже при попытке доступа к конфигурации в другом классе мой пользовательский ConfigSource исчез, и остались только три стандартных ConfigSources.Я думаю, что это может быть проблема ClassLoader.

Любые идеи, как получить динамические значения внутри ConfigSource?

1 Ответ

0 голосов
/ 12 марта 2019

У вас есть небольшое неправильное представление о ConfigBuilder. Если вы используете это для создания Config, вам придется передать его вручную.

Но в большинстве случаев вы обычно используете наш режим автообнаружения. Это работает со стандартным механизмом java.util.ServiceLoader. Это описано в спецификации PDF, а также в JavaDocs: https://github.com/eclipse/microprofile-config/blob/master/api/src/main/java/org/eclipse/microprofile/config/spi/ConfigSource.java#L64

Но я бы предпочел не иметь ConfigSource с динамическими значениями, потому что это может вызвать проблемы при высокой параллельной загрузке. Вы могли бы скорее взглянуть на механизм addLookupSuffix, который мы предложили для ConfigJSR, и прямо сейчас переносим его обратно в mp-config: https://github.com/eclipse/ConfigJSR/blob/master/api/src/main/java/javax/config/ConfigAccessor.java#L191

Это похоже на ваши первоначальные мысли, но .customer2 будет суффиксом к ключу конфигурации. НТН.

...