5.1. 应用程序主目录

应用程序主目录是一个文件系统目录,CUBA 应用程序在这里保存临时文件,也可以放置local.app.propertieslogback.xml这样的配置文件。下面提到的大多数应用程序文件夹都放在应用程序主目录中。文件存储默认也是用了应用程序主目录下的一个子目录。

由于 CUBA 应用程序会在主目录创建多种文件(临时文件、日志文件等),所以运行应用程序的用户对这个目录需要有写权限。

框架从 app.home java 系统属性获取应用程序主目录路径。

推荐在启动应用程序服务时,使用命令行参数 -D 显式的指定该属性。

显式的设置应用程序主目录

当运行 UberJAR 时,指定 -D 命令行参数,示例:

java -Dapp.home=/opt/app_home -jar app.jar

当使用 WAR 部署时,在启动脚本的合适位置用 -D 命令行参数设置 app.home,或者用应用程序服务器的其他推荐方法设置。比如,在 Tomcat 中,在 bin/setenv.sh 内添加下面内容:

CATALINA_OPTS="-Dapp.home=\"$CATALINA_BASE/work/app_home\" -Xmx512m -Dfile.encoding=UTF-8"

如果您使用部署至 Tomcat Windows 服务,需要将每个属性在 Tomcat 服务设置窗口的 Java Options 字段单独配置一行。

应用程序主目录自动检测

如果命令行参数 app.home 未提供,则根据下面规则自动设置:

  1. 如果应用程序是以 UberJAR 的方式启动,当前工作目录作为应用程序主目录。

  2. 如果 catalina.base 系统参数已设置(即应用程序运行在 Tomcat 中),应用程序主目录设置为 ${catalina.base}/work/app_home

  3. 其他情况,应用程序主目录设置为用户根目录的 .app_home 文件夹。

选项 2 和 3 有这个缺点:Logback 初始化的过程会在 app.home 属性设置之前,所以在 logback.xml 文件中的类似 ${app.home} 的引用不会生效,日志文件的位置(如果是用这种方式设置的话)也不可确定。还有,此时也不能通过简单的添加 logback.xml 至应用程序主目录覆盖日志属性,因为在初始化的时候找不到该文件。

在开发过程中使用 快速部署 时,从 7.2 版本开始,应用程序主目录会设置为项目目录下的 deploy/app_home 目录。如果项目是基于平台旧版本的话,应用程序目录会是在 Tomcat 的 confwork 目录。