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

时间:2018-08-28 03:17:59

标签: spring-boot testing h2 flyway acceptance

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

application-test.properties如下:

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会使用默认格式创建模式,而不是使用脚本:

enter image description here

如您所见,所有VARCHAR的创建大小均为255,而不是实际值。

您能帮助我将F2与H2集成吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

1-确保已禁用休眠DDL生成:

spring.jpa.hibernate.ddl-auto=none

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

V1__create_user_table_for_test.sql

答案 1 :(得分:0)

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

位置应为:

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

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

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