持久化WAR数据库配置



我正在开发一个Spring Boot(带有Hibernate和React前端(,它被部署为单个WAR文件。在第一次使用期间,管理员将使用web UI来配置后端数据库连接并设置管理员用户。

由于我无法将其持久化到数据库中,所以我想将其永久化到一个文件中。使用Hibernate H2的数据库将其写入文件以在启动时读取是一种合法的方式吗?

我想防止他们通过Java属性配置它,但是,除非我将文件默认为用户的主目录,否则我需要让他们将文件位置配置为Java属性。

但我想检查一下这是否是向客户销售生产应用程序的合理方法。唯一将存储在其中的是两个表,其中总共有几行数据。

Java命名和目录接口(JNDI(

您不应该将运行时配置详细信息硬编码到web应用程序代码库中。相反,将这些信息具体化。因此,当数据库密码更改时,您不需要重新编译您的web应用程序。例如,当您的系统管理员从Tomcat更改为Payara作为您的web容器时,您不需要重新编译您的web应用程序。

将这些信息外部化在企业应用程序中很常见。通常,这些配置信息被放置在目录服务(如LDAP服务(中。

一些web容器内置了目录服务。研究一下你的特定容器的细节及其特点。

Java提供了一个API作为代码和所有各种目录服务技术(Java命名和目录接口(JNDI((之间的中间人。在部署时,系统管理员配置您选择的目录服务,并为您的web容器放置一些配置文件。

web应用程序的Java代码使用JNDI盲目地请求所需的服务或对象。您的web应用程序不知道或不关心web容器是否是使用其内置目录服务的Apache Tomcat,或者您的系统管理员是否使用单独的LDAP服务器来存储部署详细信息。

例如,要连接到数据库,Java代码将使用JNDI API从命名/目录服务请求DataSource对象。该对象包含所需的数据库地址、用户名、密码和各种数据库选项。Java代码只需在返回的任何DataSource实现对象上调用DataSource::getConnection。这将Java代码与数据库配置的细节隔离开来。系统管理员和DBA可以自由地重新定位或重新配置数据库服务器,而不会破坏您的web应用程序。

最新更新