网站首页 > 精选文章 / 正文
我们使用@EventListener注解来注册常规事件监听器。从Spring 4.2开始,提供了专门针对事务的的监听器,事务监听器可以绑定到事务的某一个阶段,比如说,可以在事务提交成功后才开始处理事件。如果事务的执行结果对后续业务很重要时,就可以使用事务监听器来完成。
本文继续上一步文章,完成@TransactionalEventListener注解使用的代码示例。
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参数配置
- 上一篇:SpringBoot实现动态数据源配置
- 下一篇:连接池:别让连接池帮了倒忙
猜你喜欢
- 2025-01-02 Java 与 MySQL 数据库连接池优化:提升数据访问效率的关键策略
- 2025-01-02 Spring Boot 入门系列(二十四)多环境配置,3分钟搞定
- 2025-01-02 rust druid 实现自己的自定义小部件
- 2025-01-02 搞懂Druid之连接获取和归还
- 2025-01-02 Apache Druid连接开通Kerberos认证的Kafka处理过程
- 2025-01-02 非Spring Boot 或 Spring Cloud 项目如何集成Druid数据源
- 2025-01-02 Spring Boot 2.x基础教程:默认数据源Hikari的配置详解
- 2025-01-02 连接池:别让连接池帮了倒忙
- 2025-01-02 SpringBoot实现动态数据源配置
- 2025-01-02 mybatis系列-5分钟hikaryCP、Druid、C3p0数据库连接池最全对比