gpt4 book ai didi

spring - Spring JDBC 测试的事务回滚

转载 作者:IT老高 更新时间:2023-10-28 13:56:29 26 4
gpt4 key购买 nike

我试图在使用 Spring-test 时回滚 JDBC 事务但没有成功。当我运行以下 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 注释显式配置测试执行监听器,Spring 默认配置 DependencyInjectionTestExecutionListenerDirtiesContextTestExecutionListenerTransactionalTestExecutionListenerTransactionalTestExecutionListener 提供具有默认回滚语义的事务测试执行。通过在测试类上显式声明 @TestExecutionListeners 并从监听器列表中省略 TransactionalTestExecutionListener,您将禁用事务支持。

您还必须在类或方法级别添加 @Transactional 注释。

您还必须使用 DataSourceUtils获取由 DataSourceTransactionManager 管理的事务连接。

关于spring - Spring JDBC 测试的事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com