![](/img/trans.png)
[英]In Play 2 Framework , how can I include git commit sha in sbt dist package name?
[英]How do i properly configure debug level and ehcache in a play framework dist?
我在运行通过调用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文件内的内容?
我做错了什么或者这个预期的设计?
谢谢!
我不认为你做错了什么。 过去我也一直对Play如何在生产模式下管理配置感到困惑。 我相信这是他们的方法:
您包含在项目的conf
目录中的文件将进入应用程序JAR的根目录。 这个JAR是你的类路径上的第一个JAR。
这些文件也将进入ZIP文件的conf
目录。 但是,此conf
目录未添加到类路径中,因此在应用程序启动时不会加载这些文件中的配置。
稍微的例外是application.conf
- 在从类路径加载它之前,Play将在conf
目录下的文件系统上查找它。 如果找到它,它会更喜欢文件系统上的这个版本到类路径上的版本。
这种解释与您所看到的行为一致。 现在回到手头的任务,您希望能够通过更改文件系统上的文件而不是黑客攻击JAR来重新配置应用程序。 虽然Play的默认行为似乎是在JAR中保存配置文件,但是他们的生产配置文档提供了不同的方式来公开配置文件以便于访问:
您发现文件系统上的application.conf
文件的更改被Play选中,因此您不需要做任何不同的操作。 您可能会对各种config.resource
, config.file
和config.url
参数感兴趣,您可以使用它们启动应用程序。
我通常使用文档中提到的logger.file
参数启动我的Play应用程序。 使用此参数并指向文件系统上的application-logger.xml
版本可以更轻松地打开调试级别的日志记录。
公开ehcache.xml
有点棘手,因为Play目前没有提供从非类路径位置加载Ehcache配置的方法。 你可以做的是在你的项目中移动你的ehcache.xml
文件:
dist/ehcache/ehcache.xml
然后,您的ZIP文件将包含在以下位置:
ehcache/ehcache.xml
然后,您可以编辑启动脚本并将此ehcache
目录添加到类路径中。 这应该工作,但有点手动和丑陋的方法。 使用SBT可能有更好的方法将目录放到类路径中。
更新了Play 2.3.8的答案
当前启动应用程序时,您可以使用ehcache.configResource参数配置ehcache的位置。
默认情况下,它会查找ehcache.xml,如果该文件不存在,则加载框架ehcache-default.xml提供的默认配置
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.