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



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

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

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
 </dependency>

和HSQLDB的依赖项:

<dependency>
   <groupId>org.hsqldb</groupId>
   <artifactId>hsqldb</artifactId>
</dependency>

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

任何想法?

注::我使用maven

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

当然可以两个都有。有几个解决方案。

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

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

如果你正在使用war,你不能使用最后一个解决方案:这是切换到jar的另一个原因;-)

您需要创建一个Maven概要文件而不是一个spring概要文件,并相应地添加依赖项。创建一个具有hsqldb依赖的本地配置文件,并在开发模式下激活它。然后创建一个带有mysql依赖的server配置文件,并在打包部署到服务器上时激活它。我个人更喜欢devrelease作为命名约定(但这只是我个人的拙见)。然后,您必须将maven配置文件spring配置文件

快捷化。
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>xyz</version>
    <configuration>
      <profiles>
        <profile>local</profile>....

在本地配置文件和

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.4.1.RELEASE</version>
    <configuration>
      <profiles>
        <profile>server</profile>...
在服务器配置文件中

,并使用此开关运行所需的配置

mvn spring-boot:run -P[local or server]

构建配置文件简介

最新更新