如何在play框架dist中正确配置调试级别和ehcache?

时间:2014-01-17 15:08:01

标签: scala playframework sbt playframework-2.2

我在运行通过调用dist任务创建的通用发行版的linux机器上使用Play Framework 2.2.1。

我对在生产中配置应用程序的不同方面的位置和方式感到有些困惑。

我有这些配置文件:

application.conf
application-logger.xml
ehcache.xml

在play framework dist任务创建的zip文件中,这些文件存在两次。

location 1:
conf/application.conf
conf/application-logger.xml
conf/ehcache.xml

location 2: 
lib/myApp.myApp-1.0-SNAPSHOT.jar/application.conf
lib/myApp.myApp-1.0-SNAPSHOT.jar/application-logger.xml
lib/myApp.myApp-1.0-SNAPSHOT.jar/ehcache.xml

事实证明,application.conf是从位置1读取的,但是application-logger.xml和ehcache.xml是从位置2读取的!!

那么,为了更改调试级别,我必须在我的发行版zip的lib文件夹中更改zip文件内的内容?

我做错了什么或这是预期的设计?

谢谢!

2 个答案:

答案 0 :(得分:5)

我认为你做错了什么。过去我也一直对Play如何在生产模式下管理配置感到困惑。我相信这是他们的方法:

  • 您在项目的conf目录中包含的文件将进入应用程序JAR的根目录。这个JAR是你类路径中的第一个JAR。

  • 这些文件也会进入ZIP文件的conf目录。然而,此conf目录已添加到您的类路径中,因此在应用程序启动时不会加载这些文件中的配置。

  • 轻微的异常是application.conf - 在从类路径加载之前,Play会在conf目录下的文件系统中查找它。如果找到它,它会更喜欢文件系统上的这个版本到类路径上的版本。

这种解释与您所看到的行为一致。现在回到手头的任务,您希望能够通过更改文件系统上的文件而不是黑客攻击JAR来重新配置应用程序。虽然Play的默认行为似乎是在JAR中保存配置文件,但是他们的production configuration documentation提出了不同的方式来公开配置文件以便于访问:

公开您的应用程序配置文件

您发现文件系统上的application.conf文件的更改会被Play选中,因此您无需采取任何不同的操作。不过,您可能会对各种config.resourceconfig.fileconfig.url参数感兴趣,您可以使用这些参数开始申请。

公开您的logback配置文件

我通常使用文档中提到的logger.file参数启动我的Play应用程序。使用此参数并指向文件系统上的application-logger.xml版本可以更轻松地打开调试级别的日志记录。

公开您的ehcache配置文件

公开ehcache.xml有点棘手,因为Play目前没有提供从非类路径位置加载Ehcache配置的方法。您可以做的是在项目中移动ehcache.xml文件:

dist/ehcache/ehcache.xml

然后,您的ZIP文件将包含在以下位置:

ehcache/ehcache.xml

然后,您可以编辑启动脚本并将此ehcache目录添加到类路径中。这应该工作,但有点手动和丑陋的方法。使用SBT可能有更好的方法将目录放到类路径上。

答案 1 :(得分:1)

Play 2.3.8的更新答案

您可以在启动应用程序时使用 ehcache.configResource 参数配置ehcache的位置。

默认情况下,它会查找ehcache.xml,如果该文件不存在,则加载框架提供的默认配置ehcache-default.xml