我正在研究一個新的Spring Batch(3.0.3.RELEASE)應用程序,其中在作業期間將訪問多個數據庫。爲了測試,我們使用HSQLDB(2.3.2)作爲嵌入式數據庫。構建期間出現jUnit錯誤時嵌入的多個HSQLDB數據庫
在我的應用程序上下文中,我有以下幾點。
<jdbc:embedded-database id="dataSource">
</jdbc:embedded-database>
<jdbc:embedded-database id="proDataSource">
<jdbc:script location="classpath:script-tables.sql" />
<jdbc:script location="classpath:script-constraints.sql" />
</jdbc:embedded-database>
<jdbc:embedded-database id="altDataSource">
<jdbc:script location="classpath:script-alt-tables.sql" />
</jdbc:embedded-database>
當我在Eclipse中運行單個測試時,情況很好。當我在命令行中建,第一次測試後,我得到的錯誤
Failed to execute SQL script statement at line 3 of resource class path resource [script-promrkt-promo.sql]
object name already exists: PROMRKT
在我看來,在EmbeddedDatabaseFactory填充過程中接收已填充的數據庫。從我可以告訴的是,每次測試後都沒有執行SHUTDOWN,並且HSQLDB正在將已填充的數據庫留在內存中。
我已重新審查文檔,並在Spring Doc這顯示一個明確的關機命令。但是,如果在我的測試開始時,彈簧啓動嵌入式數據庫,爲什麼測試完成後它不關閉?
- 預計嵌入式數據庫在相同的應用程序上下文的每個單元測試後都會保留嗎?
- 彈簧啓動嵌入式數據庫的順序是什麼,什麼時候初始化了事務上下文?
- 我需要使用數據庫清潔程序嗎?
- 能否填入被更新,以僅填充當數據庫第一次啓動,並回滾到原來的腳本配置我的測試完成時(有點像AbstractTransactionalSpringContextTests將如何工作)
- 我需要一些事務性的標記? Spring Batch的JobRepo在每次測試之間正確地被填充和銷燬。爲什麼我的自定義數據源不是?
只是爲了確認,你不使用測試過程中任何類型的連接池?我問,因爲這個問題:https://jira.spring.io/browse/SPR-11372 – 2015-01-26 20:42:57
不,連接池。至少我沒有明確表示要集合。我讀過這個問題,這可能是相關的。如果其中一條評論一次不會推薦一個嵌入式數據庫,那麼預測效果並不理想。我可以在哪裏實現Spring接口來修復/改善這種行爲的任何想法? – grbonk 2015-01-27 00:16:02