开发者社区 问答 正文

使用ConfigObject使用Java类型安全库获取字符串

对于Java,使用https://github.com/lightbend/config配置:

djobi {
    plugins {
        logger {
            enabled=true
            class="io.djobi.plugins.logging.LoggingPlugin"
        }

        apm {
            enabled=true
            class="io.djobi.plugins.apm_opentracing.APMOpenTracingPlugin"
        }
    }
}

我想遍历插件配置图,如下所示:

final ConfigObject config = this.configuration.getObject("djobi.plugins");

config.forEach((key, subConfig) -> {
    final boolean enabled = this.configuration.getBoolean("djobi.plugins." +  key + ".enabled");

   if (enabled) {
       final String clazz = this.configuration.getString("djobi.plugins." +  key + ".class");

        logger.info("Load plugin " + key);

        ....     
    }

});

如何替换```js this.configuration.getBoolean("FULL_PATH..为subConfig.getBoolean("enabled")?

展开
收起
垚tutu 2019-11-29 23:14:48 763 分享 版权
阿里云 AI 助理回答

在Java中使用Lightbend Config库遍历配置并访问子配置的属性时,可以直接从ConfigObject实例中获取值,而不需要每次都通过全路径去this.configuration中获取。你的代码可以修改如下:

final ConfigObject configPlugins = this.configuration.getObject("djobi.plugins");

configPlugins.forEach((key, subConfig) -> {
    // 直接从subConfig获取enabled和class属性
    final boolean enabled = subConfig.getBoolean("enabled");
    final String clazz = subConfig.getString("class");

    if (enabled) {
        logger.info("Load plugin " + key);

        // ... 在这里加载或执行与插件相关的逻辑 ...
    }
});

这段代码中,我们直接在forEach循环里使用了subConfig来获取enabledclass属性,这样就避免了重复拼接全路径字符串。这样做不仅让代码更简洁,也提高了效率。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答