当前位置: 首页 > 知识库问答 >
问题:

内存数据库中的spring boot测试

班高明
2023-03-14

我用spring boot创建了一个spring网络项目。想了解有关测试的实践。我需要一个内存中的嵌入式数据库,比如hsql或h2,用于具有初始schema.sql的JUnit。在主应用程序上,数据库可以是mysql或oracle

在非spring boot项目中,我们通常会有一个单独的applicationcontext.xml一个由web应用程序引用的应用程序,对于测试,我们会使用applicationcontext-text.xml

现在,在spring boot,一切都是自动创造的,spring boot也是固执己见的。想知道如何为Junits设置嵌入式内存数据库和为应用程序设置外部数据库(如MySQL)。

我能想到的一个解决方案是使用配置文件。带有2个属性文件application.properties和application-test.properties。并对我的JUnit使用测试配置文件。

关于我应该采取的方法的任何建议。

共有1个答案

韩志专
2023-03-14

事实上,配置文件是推荐的方法。我可能会做的是让内存中的实现成为“默认”配置文件(这是无害的,因为您永远不会更改任何实际数据,所以最好让它成为默认值,以防有人不小心对实际数据库运行它)。就我个人而言,我更喜欢将所有外部配置放在一个application.yml文件中,但这实际上取决于您。在外部配置中,您需要提供有效的驱动程序类和URL,例如。

spring:
  datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:test;MODE=PostgreSQL
    schema: classpath:/schema.sql

---

spring:
  profiles: local
  datasource:
    url: jdbc:postgresql://localhost/test
    username: root
    password: changeme
    driverClassName: org.postgresql.Driver
    schema:

(注意,H2有一个postgres兼容模式,所以在生产中作为postgres的补充确实很不错。)

 类似资料:
  • 一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如: rc = sqlite3_open(":memory:", &db); 在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了。

  • 我正在使用带有Spring Boot(2.3.3版)的H2数据库和H2数据库的所有默认设置。 这是我申请的所有文件。 pom.xml

  • 问题内容: 我的Django单元测试需要很长时间才能运行,因此我正在寻找加快速度的方法。我正在考虑安装SSD,但我也知道它也有缺点。当然,我的代码可以做一些事情,但是我正在寻找结构上的修复方法。由于每次都需要重建/向南迁移数据库,因此即使运行单个测试也很慢。所以这是我的主意 由于我知道测试数据库总是很小,所以为什么不能仅将系统配置为始终将整个测试数据库保留在RAM中?绝对不要触摸磁盘。如何在Dja

  • 我使用h2db进行测试,使用hibernate自动创建表,但希望flyway在数据库中插入脚本。所以,我的飞行路线没有创建脚本。 首先,我不确定这是否可能。但是当我使用一些插入脚本时,我的测试失败了,因为flyway无法插入记录,抱怨表格不存在。 似乎在h2创建表之前,它就已经在尝试运行脚本了。 我正在使用Spring靴来调用飞行路线。所以,我只需要这个依赖项和一个数据库。类路径中的migarat

  • 我阅读了发行说明,找到了关于嵌入式数据库检测的部分:https://github.com/spring-projects/spring-boot/wiki/spring-boot-2.4-release-notes#embedded-database-detection 但加上 对财产也没有帮助。 你能给我一个提示吗,是什么导致了这个问题? 亲切的问候,乌尔里希

  • 使用liquibase和springboot,创建了数据库变更日志,并能够用maven-liquibase-plugin(mvn liquibase:update)成功地运行它。我正在编写集成测试,其中需要以编程方式创建liquibase更改。 运行上述测试时出现以下异常。 java.lang.IllegalStateException:在org.springframework.test.cont