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

SpringBoot-使用Flyway和H2数据库进行测试

陆安国
2023-03-14

我正在用Cucumber编写验收测试,我想使用H2数据库进行测试。

应用程序测试属性如下所示:

server.port:8090

spring.jpa.database=H2
spring.database.driverClassName=org.h2.Driver
spring.datasource.url:jdbc:h2:mem:database_user;DB_CLOSE_ON_EXIT=FALSE
flyway.locations=classpath:resources/db/migration
flyway.enabled=true

spring.datasource.username:SA
spring.datasource.password:

spring.h2.console.enabled=true
spring.jpa.show-sql=true

security.basic.enabled:false
spring.application.name=userService

在目录resources/db/migration中,我有一个包含这些脚本的sql文件:

create table user_image(
 id int unsigned not null AUTO_INCREMENT,
 url varchar(1000) not null,
 s3_key varchar(200) not null,
 PRIMARY KEY (id)
);


create table user (
    id int unsigned not null AUTO_INCREMENT,
    email varchar(50) not null,
    password varchar(100) not null,
    first_name varchar(50) not null,
    last_name varchar(50) not null,
    description varchar(50),
    phone_number varchar(50),
    user_image_id int unsigned,
    need_refresh_pass boolean not null,
    PRIMARY KEY (id),
    CONSTRAINT fk_user_image FOREIGN KEY (user_image_id)
    REFERENCES user_image(id)
);

但是当我运行测试时,H2用默认格式创建模式,而不是使用脚本:

如您所见,所有VARCHAR都是使用255大小创建的,而不是真实值。

你能帮我把飞行道和H2整合起来吗?

谢谢!

共有2个答案

赵健柏
2023-03-14

Flyway 尚未找到任何迁移,然后Hibernate已从您的实体创建表。

位置应为:

# spring-boot 2.x
spring.flyway.locations=classpath:db/migration

# spring-boot 1.5.x
flyway.locations=classpath:db/migration

这是默认值,因此可以省略。

何超英
2023-03-14

1-确保您的HibernateDDL生成已禁用:

spring.jpa.hibernate.ddl-auto=none

2-确保SQL迁移脚本的名称符合flyway的约定。即

V1__create_user_table_for_test.sql
 类似资料:
  • 我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?

  • 本文向大家介绍SpringBoot使用flyway初始化数据库,包括了SpringBoot使用flyway初始化数据库的使用技巧和注意事项,需要的朋友参考一下 概述 Flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,SpringBoot对该款工具进行集成的框架可以让我们在启动SpringBoot应用时自动去找SQL版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库

  • 就我所知,我认为这与@id注释的H2解释有关,但不明白为什么,所以任何帮助都将不胜感激... NB-我已经搜索堆栈溢出相当广泛,包括有关使用双引号列规范的问题,但不要认为这与我的情况有关... 表 和从SP调用返回默认结果的测试类: 测试类

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

  • 问题内容: 使用嵌入式h2数据源以及JUnit(可选),用于集成测试的Spring配置看起来如何? 我第一次尝试使用SingleConnectionDataSource基本上可以成功,但是在更复杂的测试中失败了,在该测试中您需要同时进行多个连接或暂停事务。我认为基于tcp的服务器模式下的 h2 可能也能正常工作,但这可能不是内存中临时嵌入式数据库最快的通信模式。 有哪些可能性及其优势/劣势?另外,