Java 飞行路线迁移不是';t总是在没有可识别模式的情况下执行

Java 飞行路线迁移不是';t总是在没有可识别模式的情况下执行,java,flyway,Java,Flyway,我有一个有两个模块的项目。这两个模块都使用flyway进行数据库的迁移和初始设置。两个项目都是独立的。我还对每个模块进行了测试。每当我同时运行两个模块,或者只运行一个模块中的一个测试时,可能不会执行迁移。 模块一包含 a、 b.c.account.persistence.jdbc.migrations.Vaccount_1__CreateStructure.java a、 b.c.account.persistence.jdbc.migrations.Vaccount_2___CreateIn

我有一个有两个模块的项目。这两个模块都使用flyway进行数据库的迁移和初始设置。两个项目都是独立的。我还对每个模块进行了测试。每当我同时运行两个模块,或者只运行一个模块中的一个测试时,可能不会执行迁移。 模块一包含

  • a、 b.c.account.persistence.jdbc.migrations.Vaccount_1__CreateStructure.java a、 b.c.account.persistence.jdbc.migrations.Vaccount_2___CreateIndexOnName.sql ... a、 b.c.account.persistence.jdbc.migrations.Vaccount_5___AddDAOCreatedAndUpdated.sql
JDBCAccountPersistenceServiceImpl和JDBCAccountPersistenceServiceImplTest

第二单元包括

  • a、 b.c.authentication.persistence.jdbc.migrations.Vauth_1__CreateTableForPasswords.sql a、 b.c.authentication.persistence.jdbc.JDBCAuthenticationPersistenceServiceImpl
和JDBCAuthenticationPersistenceServiceImplTest

两个IMPL共享一个父类,并在其init方法中调用:

//prepare db.
Flyway flyway = new Flyway();
flyway.setDataSource(getDataSource());
flyway.setLocations(getClass().getPackage().getName()+".migrations");
flyway.migrate();
如果在干净的db和填充的db上分别启动,这两种测试都可以工作。但是,如果我清除数据库并从intellij运行测试,并首先运行JDBCAuthenticationPersistenceServiceImplTest,则另一个测试将失败:

org.postgresql.util.PSQLException: ERROR: relation "account" does not exist
  Position: 13
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
在这种情况下,schema_版本将只包含一行:

1 |              1 | auth.1  | CreateTableForPasswords | SQL  | Vauth_1__CreateTableForPasswords.sql | -1961897674 | another      | 2013-01-14 23:39:00.736033 |             18 | t
如果我手动删除所有表,测试将再次运行。如果我在clean db(maven)上从控制台运行测试,它也可以工作。 我做错了什么?
可能是因为auth.1的版本比account.1的版本高,所以account.1补丁没有执行吗?

这里有三个问题

  • 您缺少像Vaccount这样的sqlMigrationPrefix_
  • Flyway对版本过于宽容,应拒绝account.1作为有效版本号
  • 模块可能应该有单独的元数据表
  • 你好,Axel,1和2)我实际上认为在版本中添加前缀是个好主意,这样我就可以分离不同的模块了。account和auth是不同的模块,可以但不能在同一数据库中结束。因此,我希望他们有独立的版本范围。这样,每个模块都会有自己的版本—a.1 a.2 a.3 b.1 b.2,该版本将保持版本独立,并允许灵活地在prod环境中为每个模块使用单独的db,但在开发/测试环境中为所有模块使用一个db。3) 也许你是对的,我怎样才能做到呢?;-)