В настоящее время я ищу способ динамической сборки конфигурационных ключей (резервная обработка), а затем ищу их в наших файлах 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
исчез, и остались только три источника конфигурации по умолчанию. Я думаю, что это может быть проблема ClassLoader.
Любые идеи, как получить динамические значения внутри ConfigSource
?