java 无法在Helidon Mp中设置自定义配置源

p4tfgftt  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(134)

我已经按照doc中的建议进行了更改:https://helidon.io/docs/v2/#/mp/config/02_MP_config_sources但它无法识别新的配置源,并给出以下错误:不支持test-config-provider类型的配置源`
以下是我为添加新的自定义配置源所做的更改:
1.创建了实现MpMetaConfigProvider的MyConfigProvider类
1.创建了实现ConfigSource的类MyConfigSource

  1. MyConfigProvider::create()和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);
    }

1.在resources/META-INF中,添加了services/io.helidon.config.mp.spi.MpMetaConfigProvider文件。在文件中添加了MyConfigProvider的文件包路径,即<package_name>MyConfigProvider
1.文件:'mp-meta-config.yaml' contents add-discovered-sources:真正的add-discovered-converters:false add-default-sources:真
来源:

  • type:“环境变量”
  • 类型:“系统属性”
  • 类型:“测试配置提供程序”

1.在main()函数中,我们创建Config示例并将其传递给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();
    
    }

}

但它无法识别新的配置源,并给出以下错误:
不支持test-config-provider类型的配置源

oalqel3c

oalqel3c1#

io.helidon.config.Configorg.eclipse.microprofile.config.Config是不同的API。
Helidon提供了一个MicroProfile Config的实现,它具有以下Maven依赖项io.helidon.config:helidon-config-mp
你可以创建一个这样的示例:

org.eclipse.microprofile.config.ConfigProvider.getConfig()

Helidon还在其MicroProfile Config的实现中提供了一些SPI,其中之一是io.helidon.config.mp.spi.MpMetaConfigProvider
当使用上述方法创建MicroProfile示例时,将使用MpMetaConfigProvider的实现。
Helidon还提供了一个桥梁来创建由io.helidon.config.Config支持的MicroProfile 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();

上面的代码不会使用MpMetaConfigProvider的实现。
为了让你的代码能够实现MpMetaConfigProvider,你可以:

  • 使用内置的主类
  • 在使用ConfigProvider.getConfig()创建的示例中使用Server.Builder(org.eclipse.microprofile.config.Config)代替Server.Builder(io.helidon.config.Config)

相关问题