我是否应该始终在企业应用程序中使用数据库(.war、.ear - 本质上是 .jar)并且从不写入文件?

Shall I always use a database in Enterprise applications (.war, .ear - essentially .jar) and never write to a file?

如果我的应用程序的资源文件夹(设置为另一个源文件夹)中有一个资源文件 (mydata.txt)。这个 mydata.txt 最终将被打包到一个 jar 文件 (.war) 的根目录中,以部署到某个应用程序服务器 (Tomcat、Jetty、WildFly)。

文件mydata.txt有应用程序需要的一些关键数据,应用程序应附加此文件。

要从 jar 中获取文件,我可以使用 getClass().getResourceAsStream("/mydata.txt") - 因此我将此文件作为 InputStream 获取。但是我无法将此文件作为 OutputStream 获取并写入它。

不鼓励使用 getClass().getResource() - 返回 URL 的所有解决方案,始终推荐使用 getResourceAsStream,但它只允许读取,而不是 writing/updating/appending 文件。

getClass().getProtectionDomain().getCodeSource() 解决方案也不鼓励获取(写入)文件访问权限。

我可以在 Tomcat 服务器 (System.getProperty("java.io.tmpdir") 的临时目录中创建一些文件并写入它,但这是无稽之谈,因为这个文件内容对于应用程序(将其写入 tmp 目录),此外我需要附加文件,而不是创建一个新文件并写入它。

此外,我不确定写入应用程序服务器的任何其他目录(tmp 除外)是否是个好主意(如果我在这里错了,请纠正我)。

所以我得出的结论是在企业应用中不建议将任何数据保存到文件中,所以我应该一直使用数据库吗?

简而言之:是的。除了你提到的(都是正确的)之外,最大的问题是

  • 并发访问
  • 交易处理

数据库服务完美和文件方法只是****中的一个痛苦

除此之外,特别是应用程序服务器为您提供连接(和池)到任何类型的数据源的配置,这在生产环境中非常方便。