मैं सफलता के बिना स्प्रिंग-टेस्ट का उपयोग करते समय जेडीबीसी लेनदेन रोलबैक प्राप्त करने की कोशिश कर रहा हूं। जब मैं निम्नलिखित चलाता हूं तो SQL अद्यतन हमेशा प्रतिबद्ध होता है।वसंत जेडीबीसी परीक्षणों पर लेनदेन रोलबैक
package my.dao.impl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionConfiguration;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Statement;
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
@ContextConfiguration(locations={"classpath:ApplicationContext-test-DAOs.xml"})
@TransactionConfiguration(defaultRollback = true)
public class ConfirmationMatchingDAOImplTest {
@Autowired
private DataSource dataSource;
@Test
public void shouldInsertSomething() throws Exception {
final Connection connection = dataSource.getConnection();
final Statement statement = connection.createStatement();
statement.executeUpdate("insert into TEST_INSERT values (1, 'hello')");
statement.close();
connection.close();
}
}
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://makeitfunky:1490;databaseName=fonzie"/>
<property name="username" value="ralph"/>
<property name="password" value="p0n1es_R_kew1"/>
</bean>
क्या मैं गलत कर रहा हूँ?
इसके अतिरिक्त, क्या मैं बहुत सी टिप्पणियों का उपयोग कर रहा हूं? क्या मैं इसे थोड़ा क्लीनर बना सकता हूं?
मैंने @TestExecutionListeners को हटा दिया और @Transactional जोड़ा। तब मुझे ऐप-कॉन्टेक्ट (डेटासोर्सट्रांसक्शन मैनेजर) में एक लेनदेन प्रबंधक बीन जोड़ना पड़ा। टीएक्सएन वापस लुढ़का नहीं गया था इसलिए मैंने @ ट्रान्सएक्शन कॉन्फ़िगरेशन (डिफ़ॉल्ट रोलबैक = सत्य) जोड़ा। टीएक्सएन अभी भी वापस लुढ़का नहीं गया था इसलिए मैंने परीक्षण विधि में @ रोलबैक जोड़ा। केवल तभी मैंने स्प्रिंग लॉग देखा कि यह टीएक्सएन वापस रोल कर रहा था, लेकिन अपडेट अभी भी डीबी पर जारी है। एसक्यूएल सर्वर और उसके ड्राइवर के साथ कुछ करने के लिए शायद? – Synesso
जोड़ा गया डेटा स्रोत मेरे जवाब में उपयोग करता है। –
आह, मुझे आपकी आखिरी टिप्पणी के बारे में अधिसूचित नहीं किया गया था। इस बीच मैंने अपने संदर्भ को एक TransactionAwareDataSourceProxy में डेटास्रोत को लपेटने के लिए बदल दिया है। वह काम किया। तो वहां आप एक ही काम करने के दो तरीके जाते हैं। अब यह देखने के लिए कि इनमें से कौन सी एनोटेशन मैं छुटकारा पा सकता हूं और अभी भी काम कर रहा हूं। – Synesso