java - 无法使用在 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]
有时我会收到与校验和相关的错误。
解决方案
推荐阅读
- tensorflow - GradientDescentOptimizer 在急切模式下需要不带参数的损失函数
- ubuntu - VM的进程ID是否改变?
- symfony - 在实体生命周期回调中访问当前用户
- php - 如何在 php 中添加半星评级($rating 的计算)
- elixir - 为什么运行混合工作服时出现编译错误
- fortran - 如何从fortran文件中读取数据
- javascript - location.reload() 不断刷新我的页面
- python-3.x - 如何可视化BorutaPy(python实现的Boruta算法)提取的特征结果?
- spring - @RequestMapping 解决一个值和一个列表值的困惑
- c# - 如何在 ASP.NET 中执行之前在 api 中拦截 GET 请求?