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

问题描述

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

文件 mydata.txt 包含应用程序所需的一些关键数据,该文件应由应用程序附加。

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

不鼓励使用 getClass().getResource() 的所有解决方案 - 返回 URL,始终建议使用 getResourceAsStream,但它只允许读取,不允许写入/更新/附加文件。

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

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

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

所以我得出的结论是,不建议在企业应用程序中将任何数据保存到文件中,所以我总是使用数据库来代替?

标签: javaenterprise

解决方案


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

  • 并发访问
  • 事务处理

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

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


推荐阅读