从JavaEE容器读取/写入文件总是一个错误的决定吗?

从JavaEE容器读取/写入文件总是一个错误的决定吗?,java,jakarta-ee,Java,Jakarta Ee,我听说从JavaEE环境(例如Glassfish服务器)读写文件是一个糟糕的设计和决策。这总是真的吗 我知道这不好,因为多个线程可以访问一个文件。 我想为我的应用程序创建一个动态属性文件。只有一个或两个管理员将调整属性。因此,我可以将属性持久化到数据库中,但更简单的方法是将其存储在文件中 那么,简单的方法是一个错误的决定吗?缺点是什么?在这个问题上,这不是一个错误的决定 正如您所提到的,作为一个普通的用户案例,按容器存储文件是一个错误的决定,因为它是: 慢 不是线程安全的 但是您提供的案例是配置

我听说从JavaEE环境(例如Glassfish服务器)读写文件是一个糟糕的设计和决策。这总是真的吗

我知道这不好,因为多个线程可以访问一个文件。 我想为我的应用程序创建一个动态属性文件。只有一个或两个管理员将调整属性。因此,我可以将属性持久化到数据库中,但更简单的方法是将其存储在文件中


那么,简单的方法是一个错误的决定吗?缺点是什么?

在这个问题上,这不是一个错误的决定

正如您所提到的,作为一个普通的用户案例,按容器存储文件是一个错误的决定,因为它是:

  • 不是线程安全的
  • 但是您提供的案例是配置的,不是正常的使用,所以我看不出这有什么缺点


    但无论如何,您应该小心,并使用某种互斥机制,避免两个管理员同时存储文件。

    您可能知道,规范禁止在EJB中写入(和读取)文件,因为文件不是事务性资源,因此无法由容器管理。因此,如果你想安全起见,就不要这样做。也就是说,许多人仍然可以顺利完成,包括许多需要配置的常见第三方库。不过,我还是考虑把它放到数据库里。不会那么难

    编辑


    我的回答是假设您正在谈论在EJB容器中进行的,当然,当我再次阅读您的问题时,情况可能并非如此。如果它只是一个简单的web应用程序,那么规范中就不存在这样的限制。但您可能会发现将其放入数据库很有用,因为将增量更新同步到数据库比同步到文件更容易。

    我正在处理大约2GB的静态图像,这对数据库不是很苛刻吗?@Aquillo我假设OP谈论的是EJB容器,我现在看到的情况可能不是这样。如果它只是一个简单的web应用程序,我会给出不同的回答。我将更新我的答案来澄清这个范围。我正在使用一个具有EJB特性的Web应用程序,虽然我也需要处理这个应用程序中的静态图像,因此问题是:另一个要考虑的是应用程序(EJB或否)是否会被集群化。如果应用程序依赖于写入本地文件系统的文件,那么它应该用于特定实例的本地设置。如果它跨多台计算机进行集群,并且数据需要应用于集群中的所有实例,则写入文件是不合适的。这是一个潜在的劣势。