英文:
Not able to set up Custom Config Source in Helidon Mp
问题
I have made the changes as suggested in the doc: https://helidon.io/docs/v2/#/mp/config/02_MP_config_sources
But it is not able to identify the new config source and gives the following error:
Config source of type test-config-provider is not supported
Here are the changes that I have done to add the new Custom Config Source:
- Created a MyConfigProvider class which implements MpMetaConfigProvider
- Created class MyConfigSource which implements ConfigSource
- MyConfigProvider::create() and supportedTypes()
public static final String TYPE = "test-config-provider";
@Override
public List<? extends ConfigSource> create(String s, Config config, String s1) {
Map<String, String> result = new HashMap<String, String>();
ConfigSource configSource = new MyConfigSource(result);
return Collections.singletonList(configSource);
}
@Override
public Set<String> supportedTypes() {
return Set.of(TYPE);
}
- Inside resources/META-INF, added services/io.helidon.config.mp.spi.MpMetaConfigProvider file. In the file added the file package path for MyConfigProvider i.e <package_name>.MyConfigProvider
- File: 'mp-meta-config.yaml' contents
add-discovered-sources: true
add-discovered-converters: false
add-default-sources: true
sources:
- type: "environment-variables"
- type: "system-properties"
- type: "test-config-provider"
- In my main() function, we are creating the Config instance and passing it to the Server builder()
public class Main {
private static final String DEFAULT_CONFIG_FILE = "mp-meta-config.yaml";
public static void main(final String[] args) {
Config config = buildHelidonConfig();
Server server = startServer1(config);
}
private static Config buildHelidonConfig() {
return MetaConfig.config(Config.create(getSources()));
}
private static Supplier<? extends ConfigSource>[] getSources() {
return new Supplier[] {
classpath(DEFAULT_CONFIG_FILE).build()
};
}
public static Server startServer1(Config config) {
return Server
.builder()
.config(config)
.build()
.start();
}
}
But it is not able to identify the new config source and gives the following error:
Config source of type test-config-provider is not supported
英文:
I have made the changes as suggested in the doc : https://helidon.io/docs/v2/#/mp/config/02_MP_config_sources
But it is not able to identify the new config source and gives the following error :
Config source of type test-config-provider is not supported`
Here are the changes that I have done to add the new Custom Config Source :
- Created a MyConfigProvider class which implements MpMetaConfigProvider
- Created class MyConfigSource which implements ConfigSource
- MyConfigProvider::create() and supportedTypes()
public static final String TYPE = "test-config-provider";
@Override
public List<? extends ConfigSource> create(String s, Config config, String s1) {
Map<String, String> result = new HashMap<String, String>();
ConfigSource configSource = new MyConfigSource(result);
return Collections.singletonList(configSource);
}
@Override
public Set<String> supportedTypes() {
return Set.of(TYPE);
}
- Inside resources/META-INF, added services/io.helidon.config.mp.spi.MpMetaConfigProvider file. In the file added the file package path for MyConfigProvider i.e <package_name>.MyConfigProvider
- File : 'mp-meta-config.yaml' contents
add-discovered-sources: true
add-discovered-converters: false
add-default-sources: true
sources:
- type: "environment-variables"
- type: "system-properties"
- type: "test-config-provider"
- In my main() function we are creating the Config instance and passing it to the Server builder()
public class Main {
private static final String DEFAULT_CONFIG_FILE = "mp-meta-config.yaml";
public static void main(final String\[\] args) {
Config config = buildHelidonConfig();
Server server = startServer1(config);
//Server server = startServer2();
}
private static Config buildHelidonConfig() {
return MetaConfig.config(Config.create(getSources()));
}private static Supplier<? extends ConfigSource>[] getSources() {
return new Supplier[] {
classpath(DEFAULT_CONFIG_FILE).build()
};
}
public static Server startServer1(Config config) {
return Server
.builder()
.config(config)
.build()
.start();
}
}
But it is not able to identify the new config source and gives the following error :
Config source of type test-config-provider is not supported
答案1
得分: 1
io.helidon.config.Config
和 org.eclipse.microprofile.config.Config
是不同的API。
Helidon 提供了一个 MicroProfile Config 的实现,使用以下 Maven 依赖:io.helidon.config:helidon-config-mp
。
你可以像这样创建一个实例:
org.eclipse.microprofile.config.ConfigProvider.getConfig()
Helidon 还提供了一些 SPIs,其中之一是 io.helidon.config.mp.spi.MpMetaConfigProvider
,当使用上述方式创建 MicroProfile 实例时,会使用 MpMetaConfigProvider
的实现。
Helidon 还提供了一个桥接,用于创建由 io.helidon.config.Config
支持的 MicroProfile Config 实例。
// 创建一个 "Helidon Config" 实例
io.helidon.config.Config config0 = io.helidon.config.Config.create();
// 创建一个由 "Helidon Config" 支持的 "MicroProfile Config" 实例
org.eclipse.microprofile.config.Config config =
ConfigProviderResolver.instance()
.getBuilder()
.withSources(MpConfigSources.create(config0))
.build();
上面的代码将不使用 MpMetaConfigProvider
的实现。
为了让你的代码使用你的 MpMetaConfigProvider
实现,你可以选择:
- 使用内置的主类
- 使用
Server.Builder(org.eclipse.microprofile.config.Config)
而不是Server.Builder(io.helidon.config.Config)
,使用通过ConfigProvider.getConfig()
创建的实例。
英文:
io.helidon.config.Config
and org.eclipse.microprofile.config.Config
are different APIs.
Helidon provides an implementation of MicroProfile Config with the following Maven dependency io.helidon.config:helidon-config-mp
.
You can create an instance like this:
org.eclipse.microprofile.config.ConfigProvider.getConfig()
Helidon also provides a few SPIs along its implementation of MicroProfile Config, one of which is io.helidon.config.mp.spi.MpMetaConfigProvider
.
When creating an instance of MicroProfile using the above, implementations of MpMetaConfigProvider
are used.
Helidon also provides a bridge to create instances of MicroProfile Config backed by io.helidon.config.Config
.
// create an instance of "Helidon Config"
io.helidon.config.Config config0 = io.helidon.config.Config.create();
// create an instance of "MicroProfile Config" backed by "Helidon Config"
org.eclipse.microprofile.config.Config config =
ConfigProviderResolver.instance()
.getBuilder()
.withSources(MpConfigSources.create(config0))
.build();
The code above will NOT use implementations of MpMetaConfigProvider
.
In order for your code to pickup your implementation of MpMetaConfigProvider
you can either:
- Use the built-in main class
- Use
Server.Builder(org.eclipse.microprofile.config.Config)
instead ofServer.Builder(io.helidon.config.Config)
with an instance created usingConfigProvider.getConfig()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论