我正在使用 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
最佳答案
I probably can't put both dependencies in pom.xml due to Spring Boot autoconfiguration.
当然你可以同时拥有它们。有几种解决方案。
最基本的方法是拥有两个依赖项并使用 mysql 数据库的设置在您的项目中创建一个 application-server.properties
。当您在没有特定配置文件的情况下运行应用程序时,Spring Boot 将找不到任何连接到 MySQL 的信息,因此它将回退到 HSQL。在服务器上部署应用程序时,请确保启用 server
配置文件。同一 Artifact 可用于两种用例。
您可以通过在生成 fat jar 时排除 hsql 依赖项来稍微改进该解决方案。这样做的好处是,如果您忘记启用配置文件,您将在启动时遇到异常,而不是默默地使用内存中的数据库。要排除 hsql,只需 configure the maven plugin .您将能够在本地 (mvn spring-boot:run
) 或在您的 IDE 中运行该应用程序,并且 fat jar 将仅包含 mysql 依赖项。不过,您仍然需要启用 server
配置文件。
如果您使用的是 war ,则不能使用最后一个解决方案:切换到 jar 的另一个原因 ;-)
关于hibernate - Spring Boot/JPA/Hibernate,如何根据Spring配置文件切换数据库供应商?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39868307/
相关文章:
python - 如何清除 PYQTGRAPH 中的 ScatterPlotItem
amazon-s3 - Haproxy - 将请求转发到 S3 托管站点
python - 如何删除 Tkinter OptionMenu 小部件的边框
curl - 如何使用 curl 访问 IBM speech-to-text api?
coldfusion - 如何从 Coldfusion 中的结构数组中删除重复项
sql-server - 为什么即使回滚事务,SQL Server 仍保持可变状态?