首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >天桥不正确地清理数据库,并执行两次迁移文件

天桥不正确地清理数据库,并执行两次迁移文件
EN

Stack Overflow用户
提问于 2020-09-12 09:47:34
回答 1查看 501关注 0票数 0

对于迁移数据库,我也使用了FlywayTest进行集成测试,但是当我使用以下方法创建测试时:

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = APPApplication.class)
@Rollback
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, FlywayTestExecutionListener.class})
@FlywayTest
public class RolesRepositoryTest {
   ...
}

我知道这个错误:

代码语言:javascript
复制
o.f.c.internal.license.VersionPrinter    : Flyway Community Edition 6.0.8 by Redgate
com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
o.f.c.internal.database.DatabaseFactory  : Database: jdbc:h2:mem:testdb (H2 1.4)
o.f.c.internal.database.base.Database    : Flyway upgrade recommended: H2 1.4.200 is newer than this version of Flyway and support has not been tested. The latest supported version of H2 is 1.4.199.
o.f.core.internal.command.DbValidate     : Successfully validated 4 migrations (execution time 00:00.055s)
o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "PUBLIC"."flyway_schema_history" ...
o.f.core.internal.command.DbMigrate      : Current version of schema "PUBLIC": << Empty Schema >>
o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 1 - CREATE FIRST TABLES
o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 2 - INSERT ROLES
o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 3 - INSERT ADMINS
o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 4 - INSERT OTHERS
o.f.core.internal.command.DbMigrate      : Successfully applied 4 migrations to schema "PUBLIC" (execution time 00:00.464s)
o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]

o.f.test.FlywayTestExecutionListener     : ---> Start reset database for  'com.name.project.infrastructure.database.jpa.RolesRepositoryTest'.
o.f.c.internal.database.base.Database    : Flyway upgrade recommended: H2 1.4.200 is newer than this version of Flyway and support has not been tested. The latest supported version of H2 is 1.4.199.
o.f.core.internal.command.DbClean        : Successfully cleaned schema "PUBLIC" (execution time 00:00.010s)
o.f.c.internal.database.base.Database    : Flyway upgrade recommended: H2 1.4.200 is newer than this version of Flyway and support has not been tested. The latest supported version of H2 is 1.4.199.
o.f.core.internal.command.DbValidate     : Successfully validated 4 migrations (execution time 00:00.023s)
o.f.c.i.s.JdbcTableSchemaHistory         : Creating Schema History table "PUBLIC"."flyway_schema_history" ...
o.f.core.internal.command.DbMigrate      : Current version of schema "PUBLIC": << Empty Schema >>
o.f.core.internal.command.DbMigrate      : Migrating schema "PUBLIC" to version 1 - CREATE FIRST TABLES
o.f.core.internal.command.DbMigrate      : Migration of schema "PUBLIC" to version 1 - CREATE FIRST TABLES failed! Please restore backups and roll back database and code!
o.s.test.context.TestContextManager      : Caught exception while invoking 'beforeTestClass' callback on TestExecutionListener [org.flywaydb.test.FlywayTestExecutionListener@797b0699] for test class [class com.name.project.infrastructure.database.jpa.RolesRepositoryTest]

org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: 
Migration V1__CREATE_FIRST_TABLES.sql failed
--------------------------------------------
SQL State  : 42S01
Error Code : 42101
Message    : Table "ROLES" already exists; SQL statement:

如果你不:

代码语言:javascript
复制
---> Start reset database for  'com.name.project.infrastructure.database.jpa.RolesRepositoryTest'.

这来自于FlywayTestExecutionListener.class,但它再次迁移了数据库。

为什么要这么做,怎么才能阻止这一切。

详细信息

当我不在表中使用模式名称时,问题就不会发生。每件事都很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-02 19:05:53

如果您要在每个测试中重用FlywayTestExecutionListener,那么即使您使用beforeTestClass,设置也将在每个类中使用@TestExecutionListeners执行。

在JUnit中,为一次测试集设置资源的一种方法是定义规则 (用于单元4)和扩展 (用于JUnit 5)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63858997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档