使用Spring事务管理和集成JUnit测试

Spring事务管理分为编程式事务声明式事务,但是编程式事务过于复杂并且具有高度耦合性,违背了Spring框架的设计初衷,因此这里只用声明式事务,声明式事务是基于AOP实现的

只需要在配置类添加`@EnableTransactionManagement`注解即可开启Spring的事务支持。接着,需要把一个事务要做的所有事情封装到Service层的一个方法中即可,并在配置文件中注册一个新的Bean,事务需要执行必须有一个事务管理器

@Bean

public TransactionManager transactionManager(@Autowired DataSource dataSource){

    return new DataSourceTransactionManager(dataSource);

}

编写Mapper操作和业务层的接口,再来编写业务层的实现,我们可以直接将其注册为Bean,交给Spring来进行管理,这样就可以自动将Mapper注入到类中了,并且可以支持事务,只需在方法上添加`@Transactional`注解,即可表示此方法执行的是一个事务操作,在调用此方法时,Spring会通过AOP机制为其进行增强,一旦发现异常,事务会自动回滚。

@Component
public class TestServiceImpl implements TestService{

    @Resource
    TestMapper mapper;

    @Transactional
    @Override
    public void test() {
        mapper.insertStudent();
        mapper.insertStudent();
    }
}

@Transactional`注解的参数

* transactionManager:指定事务管理器

* propagation:事务传播规则,一个事务可以包括N个子事务

* isolation:事务隔离级别

* timeout:事务超时时间

* readOnly:是否为只读事务,不同的数据库会根据只读属性进行优化,比如MySQL一旦声明事务为只读,那么久不允许增删改操作了。

* rollbackFor和noRollbackFor:发生指定异常时回滚或是不回滚,默认发生任何异常都回滚

事务传播一共有七种级别,Spring默认的传播级别是`PROPAGATION_REQUIRED`

 

集成JUnit测试

Spring为我们提供了一个Test模块,它会自动集成Junit进行测试

依赖

<dependency>

    <groupId>org.junit.jupiter</groupId>

    <artifactId>junit-jupiter</artifactId>

    <version>5.8.1</version>

    <scope>test</scope>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-test</artifactId>

    <version>5.3.12</version>

</dependency>

然后直接在测试类上添加两个注解就可以搞定

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class TestMain {

    @Autowired
    TestService service;
    
    @Test
    public void test(){
        service.test();
    }
}

`@ExtendWith`是由JUnit提供的注解,等同于旧版本的`@RunWith`注解,然后使用SpringTest模块提供的`@ContextConfiguration`注解来表示要加载哪一个配置文件,可以是XML文件也可以是类,配置完成后,我们可以直接使用`@Autowired`来进行依赖注入,并且直接在测试方法中使用注入的Bean

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值