Java 读取带有注释的属性文件时Vert.x-Config异常

Java 读取带有注释的属性文件时Vert.x-Config异常,java,properties,vert.x,Java,Properties,Vert.x,我是vert.x的新手,我正试图在工作中的一个新项目中实现它 我尝试使用Vert.x-Config模块来读取层次结构的.properties文件。出于某种原因,当我试图读取带有注释(以.properties语法中记录的#或!开头)或空行的文件时,io.vertx.config.impl.ConfigRetrieverImpl(“扫描配置时出错-ArrayIndexOutOfBoundsException:1”)中出现异常 这是vertx配置中的错误还是我做错了什么 我用于读取文件的代码: Con

我是vert.x的新手,我正试图在工作中的一个新项目中实现它

我尝试使用Vert.x-Config模块来读取层次结构的.properties文件。出于某种原因,当我试图读取带有注释(以.properties语法中记录的#或!开头)或空行的文件时,io.vertx.config.impl.ConfigRetrieverImpl(“扫描配置时出错-ArrayIndexOutOfBoundsException:1”)中出现异常

这是vertx配置中的错误还是我做错了什么

我用于读取文件的代码:

ConfigStoreOptions propertyWitHierarchical = new ConfigStoreOptions()
            .setFormat("properties")
            .setType("file")
            .setConfig(new JsonObject()
                    .put("path", "app.properties")
                    .put("hierarchical", true));
    ConfigRetrieverOptions options = new ConfigRetrieverOptions()
            .addStore(propertyWitHierarchical);
    ConfigRetriever configRetriever = ConfigRetriever.create(Vertx.vertx(), options);
我得到的例外情况是:

io.vertx.config.impl.ConfigRetrieverImpl
SEVERE: Error while scanning configuration
java.lang.ArrayIndexOutOfBoundsException: 1
    at io.vertx.config.impl.spi.PropertiesConfigProcessor$HierarchicalPropertiesReader.lambda$toJson$1(PropertiesConfigProcessor.java:122)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:479)
    at io.vertx.config.impl.spi.PropertiesConfigProcessor$HierarchicalPropertiesReader.toJson(PropertiesConfigProcessor.java:130)
    at io.vertx.config.impl.spi.PropertiesConfigProcessor$HierarchicalPropertiesReader.readAsJson(PropertiesConfigProcessor.java:113)
    at io.vertx.config.impl.spi.PropertiesConfigProcessor.lambda$process$0(PropertiesConfigProcessor.java:70)
    at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$2(ContextImpl.java:272)
    at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:748)
更新#1

这是我使用的属性文件的一个示例

# Server A address
serverA.addr=127.0.0.1

! Server A port
serverA.port=8080

# Server B address
serverB.addr=127.0.0.1

! Server B port
serverB.port=8080

在研究vertx配置源代码之后,我在PropertiesConfigProcessor类中发现了这个bug。toJson方法似乎没有考虑注释和空行,因此我向vertx配置项目提交了一个bug修复(等待批准)


修复方法是向流api添加一个过滤器,该过滤器应过滤空行,以及以“#”或“!”开头的行(这是属性文件中注释的正确语法)。

我忘了提到我使用的是vert.x-core 3.6.2和vert.x-config 3.6.2,这应该可以正常工作。你可以发布你的配置文件是什么样子的吗?请注意,它只发生在层次属性文件中,而不是平面文件中,并且它是vertx配置中的一个bug。