[英]Where/how to store persistent data with tomcat?
我应该在Tomcat Web应用程序中的哪里存储持久文件?
我们的团队经常这样做。 我们遵循的一般规则是在Web应用程序外部和Tomcat外部。
我们的系统管理员在服务器上设置了tomcat用户具有rw权限的目录(例如/var/tomcat/persist
)。 我们在此基础上构建了一个目录结构,tomcat使用该目录结构来存储文件,读取特定于应用程序的初始化文件等。
如果您不想在init参数中为servlet使用绝对路径,请考虑在启动tomcat时设置系统属性。 这样做的好处是,在tomcat下运行的每个应用程序都可以访问它。 不好的是,在tomcat下运行的每个应用程序都可以访问它。 您可以设置一个名为base.persist.dir
的属性,并在其下为每个应用程序构建子目录。 我们在CATALINA_OPTS环境变量下bin /目录中的setenv.sh脚本中设置系统属性。
回答问题的标题,如何使用数据库, DataSource
和JDNI? 即使在纯Web上下文中,由于并发,线程,安全性,集群,可移植性问题,实际上也不建议使用java.io
写入文件。 其中一些问题可以“解决”,但实际上,这并不是最佳实践。 标准方法是使用数据库,我建议重新考虑此选项,将诸如HSQLBD或JavaDB之类的“基于文件的”轻量级数据库放入组合中。
(编辑:出于未知的原因,数据库不是一个选择。使用JNDI或上下文参数或init参数传递绝对路径-IMHO是较差的选项-也被排除在外。对于相对路径,也许看看user.home
然后是user.home
或user.dir
或您可以在命令行上传递的任何其他系统属性,我不喜欢它,我不会这样做,但这不能解决前面提到的问题,但这是您的选择毕竟。)
将文件存储在运行Tomcat的用户的主目录下的webapp目录中是一种很好且方便的选择。 它位于Tomcat外部,这意味着它可以在重新部署后幸免于难,并且通常是可写目录(因为它是在用户的主目录下创建的)。 但是,允许通过系统属性覆盖该目录的位置始终是一个好主意。
通常,这将转到数据库。 但是由于OP坚持不使用数据库,因此我尝试使用另一种方法:
${user.home}/.myapp
。 应用程序有时将其用于例如搜索索引,可以根据数据库中的数据重新计算搜索索引。 对于您的用例来说,使用用户的家可能还可以。 我通常建议使用数据库存储持久性数据并通过DataSource公开它。
如果您不想这样做,我想您可以考虑使用“ user.home”系统属性(我在某些情况下已经看到过)。 但是...除非您自行配置,否则不能保证您的servlet将在具有写访问权限的情况下运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.