在哪里/如何使用tomcat存储持久数据?

nos*_*nos 12 java tomcat

我应该在Tomcat Web应用程序中将持久性文件存储在何处?

  • javax.servlet.context.tempdir不可行,当重新部署/删除应用程序时,它会被删除
  • 不希望在例如servlet init参数中使用绝对路径
  • 不能选择将文件存储在数据库中

And*_*rna 10

我们的团队做了很多.我们遵循的一般规则是在Web应用程序之外和Tomcat之外.

我们的sysadmin在我们的服务器上设置了一个tomcat用户具有rw权限的目录(例如/var/tomcat/persist).我们在其下构建了一个目录结构,tomcat用它来存储文件,读取特定于应用程序的init文件等.

如果您不想在init-params中为servlet使用绝对路径,请考虑在启动tomcat时设置系统属性.好消息是在tomcat下运行的每个应用程序都可以访问它.糟糕的是,在tomcat下运行的每个应用程序都可以访问它.您可以base.persist.dir为其下的每个应用程序设置一个名为property 并构建子目录的属性.我们在CATALINA_OPTS环境变量下的bin /目录中的setenv.sh脚本中设置系统属性.


Pas*_*ent 5

回答问题的标题,使用数据库,a DataSource和JDNI怎么样?即使在仅限Web的上下文中,java.io由于并发,线程,安全性,群集,可移植性问题,也不建议使用写入文件.其中一些问题可能是"变通的",但仍然不是最佳实践.标准方法是使用数据库,我建议重新考虑这个选项,将"基于文件"的轻量级数据库(如HSQLBD或JavaDB)投入到混合中.

(编辑:由于一个未知的原因,数据库不是一个选项.使用JNDI或上下文参数或init参数传递绝对路径 - 这是更糟糕的选项恕我直言 - 也被排除.对于相对路径,也许看看user.homeuser.dir然后 - 或者你可以在命令行上传递的任何其他系统属性.我不喜欢它,我不会这样做,这不能解决前面提到的问题,但它毕竟是你的选择.)