0

我正在使用带有 JPA 的 Java EE 开发一个 Web 应用程序。现在,我遇到了一些需要为一个实例保存的值。例如:Web 应用程序的名称、税号、联系数据。其中一些值可以由 CMS 更改。

保存这些数据的有效方法是什么?

  • 实体对象:为此创建一个对象,将其保存为实体,我觉得不对。这样,它将创建一个只有一个条目的表。我也需要创建一个 DAO 来访问它。
  • 属性文件:我不想在运行新版本的 WAR 后丢失任何更改。其次,我认为可能有比编辑属性文件更好的解决方案。
  • Applicationscoped bean:无论出于何种原因,我都不希望我的数据在重新启动应用程序时丢失。

还有另一种更有效的方法来处理这些值吗?或者我应该使用其中一种方式,如果是,为什么?

感谢您的输入!

4

1 回答 1

0

我不确定您的应用程序的细节是否足以确定哪个是最好的,但我对何时使用哪种类型的设置存储的想法是:

  • 数据库(设置表) - 真正蓬勃发展的地方,您将拥有独立于源代码发生变化的值,这些值是特定于环境的,或者您不想在文件系统上乱搞的人会改变这些值(例如,是否在环境中启用了一项功能,针对某种类型的请求与哪个服务器通信)
  • 属性文件 - 适用于在集群中基于每台机器设置的数据(尽管我建议对集群中的所有内容进行标准化),或者当您的 CMS 将是设置属性的主要(唯一?)方式时并且您将在每次安装时替换该文件
  • 应用程序 bean - 应用程序启动时需要设置(例如,要启动的 bean 数量或数据库连接字符串)
  • 在代码中 - 值永远不会改变......永远(例如应用程序名称)

存储设置的最有效方法是直接在代码中,但它非常不灵活,在大多数情况下不值得。将属性存储在文件系统中而不是在数据库中将大致相同,假设您为数据库缓存并且每次获取属性时都从数据库中读取它。如果您没有缓存,那么您将在每次访问属性时支付磁盘读取的费用,因为属性文件将在读取后将值存储在内存中。

为了便于更改值,我认为将其存储在数据库中是更改它的最简单方法(假设您不经常在许多不同的环境中更改它),因为您可以在应用程序运行时更改它并且拥有它很快生效。如果您在文件系统上的文件中有该属性,您要么需要一种方法来强制您的应用程序在运行时重新读取该属性,否则您将不得不退回您的应用程序以更改该属性。如果您在代码中拥有它,则必须重新构建您的构建以影响该属性(显然)。

于 2012-11-21T16:14:57.160 回答