Java 飞行路线迁移不是';t总是在没有可识别模式的情况下执行
我有一个有两个模块的项目。这两个模块都使用flyway进行数据库的迁移和初始设置。两个项目都是独立的。我还对每个模块进行了测试。每当我同时运行两个模块,或者只运行一个模块中的一个测试时,可能不会执行迁移。 模块一包含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
- 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
- a、 b.c.authentication.persistence.jdbc.migrations.Vauth_1__CreateTableForPasswords.sql a、 b.c.authentication.persistence.jdbc.JDBCAuthenticationPersistenceServiceImpl
//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补丁没有执行吗?这里有三个问题