Play 2 Framework的外部配置

时间:2014-02-18 10:55:13

标签: scala tomcat configuration playframework-2.0 war

我的数据库有一个自定义配置文件,当我的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

2 个答案:

答案 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 classhttp://www.cooljeff.co.uk/2009/12/12/custom-url-protocols-and-multiple-classloaders/。然后使用include url(“myproto:foobar”)