IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 使用Spring事务管理和集成JUnit测试 -> 正文阅读

[Java知识库]使用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

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-25 23:07:16  更:2022-09-25 23:07:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:09:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码