2016-01-25 70 views
1

我已經將我的pom從spring-boot-starter-parent 1.2.5.RELEASE更新爲1.3.2.RELEASE。@Rollback(true)在彈簧啓動時不起作用1.3.X

問題是,一切都保持不變,但所有測試@Rollback(true)遷移後根本不工作。

@Transactional 
    @Rollback(true) 
    @Test 
    public void testRollBack() { 
     dao.saveToDb(); 
     throw new RunTimeException(); 
    } 

Configaturation:

@Bean 
@Primary 
public PlatformTransactionManager txManager() { 
    return new DataSourceTransactionManager(dataSource()); 
} 

它完全在相同的配置和代碼,唯一的變化是春季引導版本。我無法看到交易是在日誌中創建的,假設也是

任何人都有線索?也許一種調試和理解問題的方法是什麼?

感謝

+0

發佈您的代碼。 –

+0

發佈代碼..這是非常奇怪的,我無法找到關於遷移/發佈文檔上的任何東西 – Aviad

+0

我剛剛證實_Spring TestContext Framework_有**從未**支持事務管理器的'@ Primary'。因此,你絕對肯定你只將Spring Boot的版本從1.2.5更改爲1.3.2? –

回答

0

我已經把春天的調試.. 有一個在測試框架問題/錯誤或我不理解正確使用。 我查春的代碼,看到這一點:

bf.getBean(DEFAULT_TRANSACTION_MANAGER_NAME, PlatformTransactionManager.class); 

出現這種情況的,而不是由越來越註釋@Primary標誌着春天bean時,我們有幾個事務管理器,試圖讓交易管理器,所謂的「transactionManager的」。

該解決方案只是標記在該名稱的bean ..試圖打開問題,春季測試項目,但不知道在哪裏..如果有人知道如何,請指教。

感謝

編輯:因此,解決的辦法是eiether上面我所寫過或只是他們的名字交易(@Transactional("myManager"))和測試方法簽名

+0

Spring Test是Spring Framework的一部分。它使用JIRA進行問題管理:http://jira.spring.io/browse/SPR。 –

+0

是的,但我沒有用戶爲他們的Jira :) – Aviad

+0

你可以在這裏創建一個新用戶:https://jira.spring.io/secure/Signup!default.jspa –

2

TransactionTestExecutionListener使用它已經改變了Spring框架之間頗多4.1(由Spring Boot 1.2使用)和Spring Framework 4.2(由Spring Boot 1.3使用)。這聽起來似乎有一個行爲的變化,我懷疑這可能不是故意的。

要解決您的問題而不重命名其中一個bean,您需要告訴測試框架要使用哪個事務管理器。最簡單的方法是通過@Transactional註釋:

@Transactional("txManager") 
@Rollback(true) 
@Test 
public void testRollBack() { 
    dao.saveToDb(); 
    throw new RunTimeException(); 
} 
+0

你是對的,謝謝你的回答,但我不想改變代碼。在檢查彈簧代碼和日誌後,我看到如果我將主bean作爲「transactionManager」調用,它就可以正常工作。您可以在 – Aviad

+0

以下看到我的答案:FYI:在Spring的測試支持範圍內,行爲沒有變化。有關詳細信息,請參見[SPR-13891](https://jira.spring.io/browse/SPR-13891)中的討論。 –