elasticsearch,playframework,ebean,Java,elasticsearch,Playframework,Ebean" /> elasticsearch,playframework,ebean,Java,elasticsearch,Playframework,Ebean" />

Java 仅在游戏中使用Eben和ElasticSearch

Java 仅在游戏中使用Eben和ElasticSearch,java,elasticsearch,playframework,ebean,Java,elasticsearch,Playframework,Ebean,我正在使用Java进行游戏,我试图让EBean只与elasticsearch一起工作。我不需要或不想要数据库连接,因为我不打算将数据存储在数据库中,只在elasticsearch中 这是我的application.conf ebean.docstoreonly=true ebean.docstore.url="http://dockermachine:9200" ebean.docstore.active=true ebean.docstore.generateMapping=true ebea

我正在使用Java进行游戏,我试图让EBean只与elasticsearch一起工作。我不需要或不想要数据库连接,因为我不打算将数据存储在数据库中,只在elasticsearch中

这是我的application.conf

ebean.docstoreonly=true
ebean.docstore.url="http://dockermachine:9200"
ebean.docstore.active=true
ebean.docstore.generateMapping=true
ebean.docstore.dropCreate=true
不幸的是,当我运行该项目时,出现以下错误:

[error] java.lang.RuntimeException: com.typesafe.config.ConfigException$WrongType: conf\application.conf: 33: docstoreonly has type BOOLEAN rather than LIST
[error]     at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:163)
[error]     at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:174)
[error]     at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:188)
[error]     at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:193)
[error]     at com.typesafe.config.impl.SimpleConfig.getList(SimpleConfig.java:262)
[error]     at com.typesafe.config.impl.SimpleConfig.getHomogeneousUnwrappedList(SimpleConfig.java:348)
[error]     at com.typesafe.config.impl.SimpleConfig.getStringList(SimpleConfig.java:406)
[error]     at play.db.ebean.EbeanParsedConfig.lambda$parseFromConfig$5(EbeanParsedConfig.java:72)
[error]     at java.util.Map.forEach(Map.java:630)
[error]     at play.db.ebean.EbeanParsedConfig.parseFromConfig(EbeanParsedConfig.java:66)
[error]     at play.db.ebean.EbeanParsedConfig.parseFromConfig(EbeanParsedConfig.java:47)
[error]     at play.db.ebean.ModelsConfigLoader.apply(ModelsConfigLoader.java:28)
[error]     at play.db.ebean.ModelsConfigLoader.apply(ModelsConfigLoader.java:21)
[error]     at play.ebean.sbt.PlayEbean$.$anonfun$configuredEbeanModels$4(PlayEbean.scala:153)
[error]     at play.ebean.sbt.PlayEbean$.withClassLoader$1(PlayEbean.scala:130)
[error]     at play.ebean.sbt.PlayEbean$.$anonfun$configuredEbeanModels$1(PlayEbean.scala:150)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error]     at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:262)
[error]     at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]     at sbt.Execute.work(Execute.scala:271)
[error]     at sbt.Execute.$anonfun$submit$1(Execute.scala:262)
[error]     at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:36)
[error]     at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java)
[error]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]     at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] java.lang.RuntimeException: com.typesafe.config.ConfigException$WrongType: conf\application.conf: 33: docstoreonly has type BOOLEAN rather than LIST
[error]     at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:163)
[error]     at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:174)
[error]     at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:188)
[error]     at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:193)
[error]     at com.typesafe.config.impl.SimpleConfig.getList(SimpleConfig.java:262)
[error]     at com.typesafe.config.impl.SimpleConfig.getHomogeneousUnwrappedList(SimpleConfig.java:348)
[error]     at com.typesafe.config.impl.SimpleConfig.getStringList(SimpleConfig.java:406)
[error]     at play.db.ebean.EbeanParsedConfig.lambda$parseFromConfig$5(EbeanParsedConfig.java:72)
[error]     at java.util.Map.forEach(Map.java:630)
[error]     at play.db.ebean.EbeanParsedConfig.parseFromConfig(EbeanParsedConfig.java:66)
[error]     at play.db.ebean.EbeanParsedConfig.parseFromConfig(EbeanParsedConfig.java:47)
[error]     at play.db.ebean.ModelsConfigLoader.apply(ModelsConfigLoader.java:28)
[error]     at play.db.ebean.ModelsConfigLoader.apply(ModelsConfigLoader.java:21)
[error]     at play.ebean.sbt.PlayEbean$.$anonfun$configuredEbeanModels$4(PlayEbean.scala:153)
[error]     at play.ebean.sbt.PlayEbean$.withClassLoader$1(PlayEbean.scala:130)
[error]     at play.ebean.sbt.PlayEbean$.$anonfun$configuredEbeanModels$1(PlayEbean.scala:150)
[error]     at scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error]     at sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:39)
[error]     at sbt.std.Transform$$anon$4.work(System.scala:66)
[error]     at sbt.Execute.$anonfun$submit$2(Execute.scala:262)
[error]     at sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error]     at sbt.Execute.work(Execute.scala:271)
[error]     at sbt.Execute.$anonfun$submit$1(Execute.scala:262)
[error]     at sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:174)
[error]     at sbt.CompletionService$$anon$2.call(CompletionService.scala:36)
[error]     at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java)
[error]     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error]     at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
[error]     at java.util.concurrent.FutureTask.run(FutureTask.java)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]     at java.lang.Thread.run(Thread.java:748)
[error] (module1 / Compile / playEbeanModels) com.typesafe.config.ConfigException$WrongType: conf\application.conf: 33: docstoreonly has type BOOLEAN rather than LIST
[error] (module2 / Compile / playEbeanModels) com.typesafe.config.ConfigException$WrongType: conf\application.conf: 33: docstoreonly has type BOOLEAN rather than LIST
[error] Total time: 4 s, completed Apr 23, 2018 5:06:00 PM
我在github上找到了以下示例: 它说应该将
ebean.docstoreonly
设置为true,但它似乎需要List。 我正在使用
sbt播放ebean
插件

addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.1.0")
内部使用EBean 11.7.x版

My build.sbt依赖于此弹性组件:

 "io.ebean" % "ebean-elastic" % "11.15.1"

是否可以使用elasticsearch(仅限elasticsearch),或者我是否应该使用其他方法,如elasticsearch官方java sdk?

经过长时间的尝试和错误,以下是解决方案:

似乎
application.conf
不是我应该存储ebean属性的地方。它应该是一个单独的文件,位于
application.conf
所在的同一目录中

文件应命名为
ebean.properties

ebean.elasticsearch.docStoreOnly=true
ebean.elasticsearch.docstore.url=http://dockermachine:9200
ebean.elasticsearch.docstore.active=true
ebean.elasticsearch.docstore.generateMapping=true
ebean.elasticsearch.docstore.dropCreate=true
ebean.elasticsearch.docstore.pathToResources=conf
这里有几点需要注意:

  • 据我所知,
    ebean.properties
    在这里是必要的,因为
    application.conf
    无法解释未知的键/值对,并且默认为LIST。这应该是sbt play ebean的工作,但是插件似乎已经过时了(有人可能会给我更好的解释)
  • ebean.docstoreonly
    错误。这是它的正确大小写:
    ebean.docStoreOnly
  • 如果未创建正确的文件夹,则不会创建生成的映射json文件。默认情况下,ebean生成到
    src/main/resources
    的映射文件。这将在Maven构建中起作用,但是使用sbt构建工具和play框架,需要进入项目(或子模块)的
    /conf
    文件夹中。这就是为什么我需要覆盖
    ebean.elasticsearch.docstore.pathToResources
  • sbt中也需要H2依赖关系(如果您还没有):
    “com.H2数据库”%“H2”%“1.4.196”
    。不知道为什么(因为我没有任何支持数据库),但我得到了ClassNotFoundExceptions
  • 我所从事的项目是特定的,我只需要elasticsearch上的一些数据,而实际数据库上的一些数据。Ebean elastic被设计为数据库中存储的模型的支持索引。如果启用
    docStoreOnly
    则ebean将不再在实际数据库中执行任何写入操作。要使其正常工作,则需要创建两个ebean服务器:一个仅连接到数据库,另一个仅与elasticsearch通信。在我的例子中,默认的ebeanserver用于只用于数据库的连接(在那里没有做任何更改),我在默认情况下访问它:
    ebeanserver db=Ebean.getDefaultServer()。仅对于elasticsearch,我必须配置单独的ebeanserver。这就是为什么在
    ebean.properties
    中,我在
    ebean
    和其他配置设置之间有
    elasticsearch
    (ebean服务器的名称)。因此,基本上,
    ebean.properties
    定义了名为
    elasticsearch
    的新ebean服务器。除此之外,没有其他配置要求。在代码内部,我只使用elasticsearch的ebean服务器,如下所示:
    EbeanServer dbes=ebean.getServer(“elasticsearch”)