執行我有兩個模塊的項目。兩個模塊都使用flyway進行數據庫遷移和初始設置。兩個項目都是獨立的。我也在每個模塊中進行測試。無論何時我運行這兩個模塊,或者也只有一個模塊的測試,遷移可能不會執行。 模塊一個包含遷飛路線的遷徙並非始終沒有recognizeable模式
- abcaccount.persistence.jdbc.migrations.Vaccount_1__CreateStructure.java abcaccount.persistence.jdbc.migrations.Vaccount_2__CreateIndexOnName.sql ... abcaccount.persistence.jdbc.migrations.Vaccount_5__AddDAOCreatedAndUpdated .sql
and JDBCAccountPersistenceServiceImpl with JDBCAccountPersistenceServiceImplTest。
模塊2包含
- a.b.c.authentication.persistence.jdbc.migrations.Vauth_1__CreateTableForPasswords.sql a.b.c.authentication.persistence.jdbc.JDBCAuthenticationPersistenceServiceImpl
和JDBCAuthenticationPersistenceServiceImplTest。
兩個Impls共享一個父類中的init()方法的調用:如果在乾淨的數據庫和填充數據庫單獨啓動
//prepare db.
Flyway flyway = new Flyway();
flyway.setDataSource(getDataSource());
flyway.setLocations(getClass().getPackage().getName()+".migrations");
flyway.migrate();
兩個測試工作。但是,如果我乾淨DB和運行從第一運行JDBCAuthenticationPersistenceServiceImplTest的IntelliJ測試,其他的測試會失敗:
org.postgresql.util.PSQLException: ERROR: relation "account" does not exist
Position: 13
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
的schema_version會在這種情況下只包含一個行:
1 | 1 | auth.1 | CreateTableForPasswords | SQL | Vauth_1__CreateTableForPasswords.sql | -1961897674 | another | 2013-01-14 23:39:00.736033 | 18 | t
如果我手動刪除所有表格,測試將再次運行。如果我從清潔數據庫(maven)上的控制檯運行測試,它也可以。 我在做什麼錯? 會不會是auth.1被認爲是更高版本比account.1因此account.1補丁不執行?手頭
你好阿克塞爾, 1和2)其實我一直以爲是添加前綴的版本,所以我可以分出不同的模塊是一個好主意。帳戶和身份驗證是不同的模塊,但可以但不能在同一個數據庫中結束。爲此,我希望他們有獨立的版本範圍。這樣,每個模塊將有自己的版本 - A.1 A.2 A.3 B.1 B.2 那將保持獨立的版本,並允許靈活地督促環境中使用,每個模塊獨立的數據庫,但對於一個分貝開發/測試環境中的所有模塊。3)你可能是對的,我該怎麼做? ;-) – Leon
oh nevermind,我認爲它的public void setTable(String table) – Leon