一般 ehcache 的配置中默认的 diskStore 的路径设置的是 java.io.tmpdir ,等于是当前系统的临时目录。
但是在 Tomcat 和 Resin 这两个应用服务器上,临时目录是有区别的,在 Tomcat 上运行的应用通过 java.io.tmpdir 系统变量获取到的路径是 Tomcat 目录下的 temp 子目录,而 Resin 返回的是系统的临时目录,linux下可能就是 /tmp
在 Linux 下如果我们使用的是 root 账号来启动 Tomcat 和 Resin 的话,那这个问题就不存在。但是我们非常不建议用 root 来启动 Tomcat 和 Resin,这时候我们会单独的创建一个非特权账号,假设该账号名为 www 来运行应用服务器。
我们需要将 Tomcat 和 Resin 所在的目录授权给 www 账号,这样应用服务器的日志文件才能正常的写入,但是由于 Resin 的临时目录是对应系统的 /tmp 目录,因此如果应用中使用了 ehcache 并设置了存储路径为 java.io.tmpdir ,你就会发现启动的时候报错,提示没有在 /tmp 目录下创建文件的权限,这是因为 www 账号没有写 tmp 目录的权限。
解决的办法就是修改 ehcache 的 diskStore 配置的值为 user.home ,将存储文件路径指定到用户的主目录下即可。
而 Tomcat 就没有这个问题,因为它的临时目录在 {tomcat}/temp ,而整个 {tomcat} 都已经授权给 www 账号了。