我的数据库有一个自定义配置文件,当我的Play项目打包成战争时,我希望将其外化。
我使用javaOptions
java命令在build.sbt
中尝试-DConfig.file
,但我的文件未被检测到...
我的专栏:javaOptions in run += "-Dconfig.file=conf/database.conf"
我在Tomcat服务器上部署的战争是:
/mywar/META-INF/MANIFEST.MF
/mywar/WEB-INF/lib/myplayproject.jar
(与其他依赖关系)
我将我的conf文件放在lib目录中:/lib/conf/database.conf
我在哪里做错了?
(基于此链接:http://www.scala-sbt.org/0.12.3/docs/Detailed-Topics/Forking.html)
答案 0 :(得分:0)
如果你在Tomcat上部署你的战争,我不知道如何涉及sbt,这可以解释为什么忽略你的选项。
游戏并非真正意味着要部署为战争。我认为最简单的方法是通过typesafe配置库在代码中手动加载配置文件。
答案 1 :(得分:0)
部署到容器时,您无法控制JVM进程,因此无法指定命令行选项来设置系统属性。
这里最简单的方法可能是将配置文件重命名为reference.conf或application.conf。这两个名称由类路径中的配置库自动加载。
如果你想保留一个单独的文件,你也可以编辑reference.conf或application.conf来添加include "database.conf"
。
否则您可以手动加载配置文件,例如使用ConfigFactory.parseResource
来搜索类路径。
除了包含类路径资源外,您还可以包含开箱即用的文件和网址。使用include url("http://example.com")
或include file("foo.conf")
语法。手动(在代码中)ConfigFactory
当然也可以解析网址和文件。
如果这不够灵活,也可以通过两种方式自定义包含。
一种是创建自定义ConfigIncluder http://typesafehub.github.io/config/latest/api/com/typesafe/config/ConfigIncluder.html
另一种是以通常的Java方式创建自定义URL协议,例如,请参阅Creating custom URI scheme using URI class和http://www.cooljeff.co.uk/2009/12/12/custom-url-protocols-and-multiple-classloaders/。然后使用include url(“myproto:foobar”)