MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

SpringBoot事务事件监听:事务事件监听注解详细使用示例(二)

2025-01-02 16:42 huorong 精选文章 3 ℃ 0 评论

我们使用@EventListener注解来注册常规事件监听器。从Spring 4.2开始,提供了专门针对事务的的监听器,事务监听器可以绑定到事务的某一个阶段,比如说,可以在事务提交成功后才开始处理事件。如果事务的执行结果对后续业务很重要时,就可以使用事务监听器来完成。


本文继续上一步文章,完成@TransactionalEventListener注解使用的代码示例。

SpringBoot事务事件监听:事务事件监听注解详细使用示例(一)

SpringBoot事件监听:事件监听器注解使用示例

SpringBoot事件监听:应用监听接口的使用

一、配置类Config

示例代码中使用Java Config形式配置,示例代码如下所示:

@Configuration

@EnableTransactionManagement

public class Config {

/**

* 配置Druid数据源

*/

@Bean

public DruidDataSource druidDataSource() {

DruidDataSource druidDataSource = new DruidDataSource();

//为了方便,直接硬编码了

//简单的配置数据库连接信息,其他连接池信息采用默认配置

druidDataSource.setUrl("jdbc:mysql://localhost:3306/bookingmsdb?zeroDateTimeBehavior=CONVERT_TO_NULL");

druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");

druidDataSource.setUsername("bookingmsdb");

druidDataSource.setPassword("bookingmsdb");

return druidDataSource;

}


/**

* 配置JdbcTemplate

* 直接使用spring-jdbc来操作某一个数据库,不使用其他外部数据库框架

*/

@Bean

public JdbcTemplate jdbcTemplate() {

//传入一个数据源

return new JdbcTemplate(druidDataSource());

}


/**

* 配置DataSourceTransactionManager

* 用于管理某一个数据库的事务

*/

@Bean

public DataSourceTransactionManager transactionManager() {

//传入一个数据源

return new DataSourceTransactionManager(druidDataSource());

}

}

二、Spring Boot 基于 JUnit 5 实现单元测试

Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,在 Spring Boot 2.2.0 版本之前,spring-boot-starter-test 包含了 JUnit 4 的依赖,Spring Boot 2.2.0 版本之后替换成了 Junit Jupiter。本示例项目采用的Spring Boot版为 2.4.4,如图所示。


增加 spring-boot-starter-test 依赖项:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>


下面,我们开始编写JUnit 5 单元测试。

使用Junit 5,我们不再需要@RunWith(SpringRunner.class) 。 Spring测试是通过@SpringBootTest执行的。


@SpringBootTest

public class CargoQueryServiceTest {

@Autowired

private CargoQueryService cargoQueryService;


@Test

public void testSelect() {

cargoQueryService.select("72450104");

}

}

一般情况下,使用@SpringBootTest后,Spring将加载所有被管理的bean,基本等同于启动了整个服务,此时便可以开始功能测试。

(此处已添加圈子卡片,请到今日头条客户端查看)

由于web服务是最常见的服务,且我们对于web服务的测试有一些特殊的期望,所以@SpringBootTest注解中,给出了webEnvironment参数指定了web的environment,该参数的值一共有四个可选值:

  • MOCK:此值为默认值,该类型提供一个mock环境,可以和@AutoConfigureMockMvc或@AutoConfigureWebTestClient搭配使用,开启Mock相关的功能。注意此时内嵌的服务(servlet容器)并没有真正启动,也不会监听web服务端口。
  • RANDOM_PORT:启动一个真实的web服务,监听一个随机端口。
  • DEFINED_PORT:启动一个真实的web服务,监听一个定义好的端口(从application.properties读取)。
  • NONE:启动一个非web的ApplicationContext,既不提供mock环境,也不提供真实的web服务。

运行testSelect()方法,如图所示,JUnit 5 使用新的 org.junit.jupiter 包。

控制台输出结果如下:

Tags:druid参数配置

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言