我在运行通过调用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文件内的内容?
我做错了什么或这是预期的设计?
谢谢!
答案 0 :(得分:5)
我认为你做错了什么。过去我也一直对Play如何在生产模式下管理配置感到困惑。我相信这是他们的方法:
您在项目的conf
目录中包含的文件将进入应用程序JAR的根目录。这个JAR是你类路径中的第一个JAR。
这些文件也会进入ZIP文件的conf
目录。然而,此conf
目录不已添加到您的类路径中,因此在应用程序启动时不会加载这些文件中的配置。
轻微的异常是application.conf
- 在从类路径加载之前,Play会在conf
目录下的文件系统中查找它。如果找到它,它会更喜欢文件系统上的这个版本到类路径上的版本。
这种解释与您所看到的行为一致。现在回到手头的任务,您希望能够通过更改文件系统上的文件而不是黑客攻击JAR来重新配置应用程序。虽然Play的默认行为似乎是在JAR中保存配置文件,但是他们的production configuration documentation提出了不同的方式来公开配置文件以便于访问:
您发现文件系统上的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可能有更好的方法将目录放到类路径上。
答案 1 :(得分:1)
Play 2.3.8的更新答案
您可以在启动应用程序时使用 ehcache.configResource 参数配置ehcache的位置。
默认情况下,它会查找ehcache.xml,如果该文件不存在,则加载框架提供的默认配置ehcache-default.xml