2013-01-14 73 views
1

執行我有兩個模塊的項目。兩個模塊都使用flyway進行數據庫遷移和初始設置。兩個項目都是獨立的。我也在每個模塊中進行測試。無論何時我運行這兩個模塊,或者也只有一個模塊的測試,遷移可能不會執行。 模塊一個包含遷飛路線的遷徙並非始終沒有recognizeable模式

  • abcaccount.persistence.jdbc.migrations.Vaccount_1__CreateStructure.java abcaccount.persistence.jdbc.migrations.Vaccount_2__CreateIndexOnN​​ame.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補丁不執行?手頭

回答

0

三個問題在這裏。

  1. 你缺少像Vaccount_一個sqlMigrationPrefix
  2. 遷飛過於寬容與版本,並應拒絕account.1作爲一個有效的版本號
  3. 模塊大概應該有獨立的元數據表
+0

你好阿克塞爾, 1和2)其實我一直以爲是添加前綴的版本,所以我可以分出不同的模塊是一個好主意。帳戶和身份驗證是不同的模塊,但可以但不能在同一個數據庫中結束。爲此,我希望他們有獨立的版本範圍。這樣,每個模塊將有自己的版本 - A.1 A.2 A.3 B.1 B.2 那將保持獨立的版本,並允許靈活地督促環境中使用,每個模塊獨立的數據庫,但對於一個分貝開發/測試環境中的所有模塊。3)你可能是對的,我該怎麼做? ;-) – Leon

+0

oh nevermind,我認爲它的public void setTable(String table) – Leon