我是vert.x的新手,正在尝试在工作中的新项目中实现它。
我尝试使用Vert.x-Config模块来读取分层的.properties文件。出于某种原因,当我尝试读取带注释的文件(以#或!开头时),我从io.vertx.config.impl.ConfigRetrieverImpl(“扫描配置时出错-ArrayIndexOutOfBoundsException:1”)获取异常。 (以.properties语法记录)或以空白行记录。
这是vertx-config中的错误还是我做错了什么?
我用来读取文件的代码:
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
这是一个属性的示例文件I中使用
# 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
答案 0 :(得分:1)
研究了vertx-config源代码后,我发现了PropertiesConfigProcessor类内的错误。看来toJson方法没有处理注释和空白行,所以我已经对vertx-config项目提交了一个bug修复程序(等待批准)。
解决方法是向流api添加一个过滤器,该过滤器应过滤空行以及以“#”或“!”开头的行(这是属性文件中注释的正确语法)。