Spring Boot / JPA / Hibernate,如何根据 Spring 配置文件切换数据库供应商?

Ort*_*kni 2 profile hibernate jpa maven spring-boot

我正在使用 Spring Boot/JPA/Hibernate。在服务器上部署时,我想在本地主机和 MySQL 上测试时使用 HSQLDB。

在 pom.xml 中,我对 MySQL 有这个依赖:

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
 </dependency>
Run Code Online (Sandbox Code Playgroud)

以及 HSQLDB 的这种依赖关系:

<dependency>
   <groupId>org.hsqldb</groupId>
   <artifactId>hsqldb</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

由于 Spring Boot 自动配置,我可能无法将两个依赖项都放在 pom.xml 中。但是我想在localSpring 配置文件处于活动状态时使用 HSQLDB,并在Spring 配置文件处于活动状态时使用 MySQL server。理想情况下,我只想生成一个 war 文件并使用该 war 文件运行本地版本mvn spring-boot:run并部署服务器版本。

任何的想法?

PS:我正在使用maven

Ste*_*oll 5

由于 Spring Boot 自动配置,我可能无法将两个依赖项都放在 pom.xml 中。

当然你可以同时拥有它们。有几种解决方案。

最基本的一个是拥有两个依赖项,并application-server.properties使用 mysql 数据库的设置在您的项目中创建一个。当您在没有特定配置文件的情况下运行应用程序时,Spring Boot 将找不到任何连接到 MySQL 的信息,因此它将回退到 HSQL。在服务器上部署应用程序时,请确保启用server配置文件。相同的工件可用于两个用例。

您可以通过在生成胖 jar 时排除 hsql 依赖项来稍微改进该解决方案。这样做的好处是,如果您忘记启用配置文件,您将在启动时遇到异常,而不是默默地使用内存数据库。要排除 hsql,只需配置 maven 插件。您将无法在本地 ( mvn spring-boot:run) 或在您的 IDE 中运行该应用程序,并且胖 jar 将仅包含 mysql 依赖项。不过,您仍然必须启用server配置文件。

如果您正在使用战争,则不能使用最后一个解决方案:切换到 jar 的另一个原因;-)