首页 > 解决方案 > 无法使用在 H2 数据库中使用 Flyway 创建的表

问题描述

我是 flyway 新手,在 H2 数据库中使用 flyway 创建表时有些吃力

我已经使用 flyway 脚本在我的 oracle 数据库中创建了表。

现在我想执行一些 Junit 测试并想使用 Flyway 脚本而不是在 oracle 数据库中创建表,而是我想在 H2 数据库中创建它(用于单元测试)。

在我的案例中使用的 Flyway 脚本不同,两个脚本的表结构略有不同。

下面是我使用的项目结构和配置

项目结构

以下是src/main/resources文件夹中的配置

V1.0.0.0.001__tables.sql

CREATE TABLE COMMAND_ACTION 
(COMMAND_TYPE_CD VARCHAR2(50 BYTE) NOT NULL, 
ACTION VARCHAR2(50 BYTE) NOT NULL, 
ACTION_ORDER NUMBER(*,0) NOT NULL, 
CONSTRAINT COMMAND_ACTION_PK PRIMARY KEY (COMMAND_TYPE_CD, ACTION_ORDER),
CONSTRAINT COMMAND_ACTION_FK FOREIGN KEY (ACTION) REFERENCES ACTION_DEFINITION(ACTION)
);

CREATE TABLE COMMAND_ACTION_CONFIGURATION 
(   COMMAND_TYPE_CD VARCHAR2(50 BYTE) NOT NULL, 
ACTION VARCHAR2(50 BYTE) NOT NULL, 
CONFIGURATION VARCHAR2(1024 BYTE) NOT NULL);

应用程序属性

spring.profiles.active=cca
spring.flyway.table=CCA_SCHEMA_VERSION
spring.flyway.baseline-on-migrate=true
spring.flyway.schemas=CCA
spring.flyway.user=cca
spring.flyway.password=cca

应用程序-cca.properties

spring.datasource.url=jdbc:oracle:thin:@linux:8080:devdb
spring.datasource.jdbc-url=jdbc:oracle:thin:@linux:8080:devdb
spring.datasource.username=cca
spring.datasource.password=cca
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

以下是src/test/resources文件夹中的配置

V1.0.0.0.001__tables.sql

CREATE TABLE COMMAND_ACTION 
(COMMAND_TYPE_CD VARCHAR2(50 BYTE) NOT NULL, 
ACTION VARCHAR2(50 BYTE) NOT NULL, 
ACTION_ORDER NUMBER(10,0) NOT NULL, 
CONSTRAINT COMMAND_ACTION_PK PRIMARY KEY (COMMAND_TYPE_CD, ACTION_ORDER),
CONSTRAINT COMMAND_ACTION_FK FOREIGN KEY (ACTION) REFERENCES ACTION_DEFINITION(ACTION)
);

CREATE TABLE COMMAND_ACTION_CONFIGURATION 
(   COMMAND_TYPE_CD VARCHAR2(50 BYTE) NOT NULL, 
ACTION VARCHAR2(50 BYTE) NOT NULL, 
CONFIGURATION VARCHAR2(1024 BYTE) NOT NULL);

测试属性

spring.profiles.active=test
spring.flyway.table=CCA_SCHEMA_VERSION
spring.flyway.baseline-on-migrate=true
spring.flyway.user=
spring.flyway.password=

应用程序-test.properties

spring.datasource.url=jdbc:h2:mem:DATABASE
spring.datasource.jdbc-url=jdbc:h2:mem:DATABASE
spring.datasource.username=
spring.datasource.password=
spring.database.driverClassName=org.h2.Driver
spring.flyway.locations=classpath:db/migration
spring.jpa.hibernate.ddl-auto=none
# Enabling H2 Console
spring.h2.console.enabled=true

我希望我的 junit 应该独立于我的 src/resources 工作,但在我运行 maven install 时无法实现而不是低于错误

        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_66]
2020-02-27T12:45:22,000 DEBUG  CommandService                 [pool-3-thread-1] Timer is started.
2020-02-27T12:45:22,001 ERROR  CommandService                 [pool-3-thread-1] Error in processing command. Error :{}
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "COMMAND_ACTION" not found; SQL statement:
select ca.command_type_cd,  ca.action, cac.CONFIGURATION from command_action ca
left outer join command_action_configuration cac 
on ca.command_type_cd = cac.command_type_cd  and ca.action = cac.action
order by ca.command_type_cd, ca.action_order [42102-200]

有时我会收到与校验和相关的错误。

标签: javaspringspring-booth2flyway

解决方案


推荐阅读