SpringBoot整合atomikos实现多数据源全局事务
atomikos官网
引入maven 依赖
<!--引入atomikos-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
1.application.yml 配置
spring:
datasource:
mysql:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
oracle:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
2.这里我都是使用mysql 创建个两个库 test test2
创建数据源基本配置类(两个源两个配置)
2.1 test 配置源
package org.xiaozhang.config.db;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.mysql.cj.jdbc.MysqlDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
import javax.sql.XADataSource;
import java.util.HashMap;
/**
* @Author: zy
* @Date: 2021/08/10
* @Description: mysql数据源配置
*/
@Configuration
@EnableConfigurationProperties(MysqlProperties.class)
@MapperScan(basePackages = "org.xiaozhang.dao.mysql",sqlSessionTemplateRef = "mysqlSqlSessionTemplate")
public class MysqlDataSourceConfig {
/**本数据源扫描的mapper路径*/
static final String MAPPER_LOCATION = "classpath*:mapper/mysql/*.xml";
@Autowired
private MysqlProperties mysqlProperties;
@Bean(name = "mysqlDataSource")
public DataSource mysqlDataSource(){
//配置xa数据源
DruidXADataSource db = new DruidXADataSource();
db.setUrl(mysqlProperties.getUrl());
db.setPassword(mysqlProperties.getPassWord());
db.setUsername(mysqlProperties.getUserName());
AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
xaDataSource.setXaDataSource(db);
xaDataSource.setUniqueResourceName("mysql");
return xaDataSource;
}
@Bean("mysqlSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(false);
sqlSessionFactoryBean.setConfiguration(configuration);
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "mysqlTransactionManager")
@Primary
public DataSourceTransactionManager mysqlTransactionManager(@Qualifier("mysqlDataSource")DataSource dataSource){
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
return dataSourceTransactionManager;
}
@Primary
@Bean(name = "mysqlSqlSessionTemplate")
public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "mysqlJdbcTemplate")
JdbcTemplate mysqlJdbcTemplate(@Qualifier("mysqlDataSource") DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
2.2 test2 配置源
package org.xiaozhang.config.db;
import com.alibaba.druid.pool.xa.DruidXADataSource;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* @Author: zy
* @Date: 2021/08/10
* @Description: oracle数据源配置
*/
@Configuration
@EnableConfigurationProperties(OracleProperties.class)
@MapperScan(basePackages = "org.xiaozhang.dao.oracle",sqlSessionTemplateRef = "oracleSqlSessionTemplate")
public class OracleDataSourceConfig {
@Autowired
private OracleProperties properties;
/**本数据源扫描的mapper路径*/
static final String MAPPER_LOCATION = "classpath*:mapper/oracle/*.xml";
@Bean(name = "oracleDataSource")
public DataSource oracleDataSource(){
DruidXADataSource db = new DruidXADataSource();
db.setUrl(properties.getUrl());
db.setPassword(properties.getPassWord());
db.setUsername(properties.getUserName());
AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
xaDataSource.setXaDataSource(db);
xaDataSource.setUniqueResourceName("oracle");
return xaDataSource;
}
@Bean("oracleSqlSessionFactory")
public SqlSessionFactory SqlSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setCacheEnabled(false);
sqlSessionFactoryBean.setConfiguration(configuration);
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "oracleTransactionManager")
public DataSourceTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "oracleSqlSessionTemplate")
public SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier("oracleSqlSessionFactory")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean(name = "oralceJdbcTemplate")
JdbcTemplate oralceJdbcTemplate(@Qualifier("oracleDataSource") DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
- 配置atomikos 事务管理器
package org.xiaozhang.config.db;
import com.atomikos.icatch.jta.UserTransactionImp;
import com.atomikos.icatch.jta.UserTransactionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.jta.JtaTransactionManager;
import javax.transaction.TransactionManager;
import javax.transaction.UserTransaction;
@Configuration
@ComponentScan
@EnableTransactionManagement
public class MainConfig {
@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean(name = "userTransaction")
public UserTransaction userTransaction() throws Throwable {
UserTransactionImp userTransactionImp = new UserTransactionImp();
userTransactionImp.setTransactionTimeout(10000);
return userTransactionImp;
}
/**
* atomikos 事务管理器
* @return
* @throws Throwable
*/
@Bean(name = "userTransactionManager")
public TransactionManager atomikosTransactionManager() throws Throwable {
UserTransactionManager userTransactionManager = new UserTransactionManager();
//设置强制关闭
userTransactionManager.setForceShutdown(false);
return userTransactionManager;
}
/**
* atomikos 事务管理器 与spring 事务整合一起
* @return
* @throws Throwable
*/
@Bean(name = "platformTransactionManager")
@DependsOn({ "userTransaction", "userTransactionManager" })
public PlatformTransactionManager transactionManager() throws Throwable {
UserTransaction userTransaction = userTransaction();
TransactionManager atomikosTransactionManager = atomikosTransactionManager();
return new JtaTransactionManager(userTransaction, atomikosTransactionManager);
}
}
- 创建测试类 和业务类 进行使用并测试
使用spring的@Transactional注解就可以 指定下我们配置的 atomikos全局事务管理器
就可以使用啦
这里看下输出日志
2023-04-24 16:39:03.003 DEBUG 36120 --- [ main] tractDirtiesContextTestExecutionListener : Before test method: context [DefaultTestContext@6cb107fd testClass = FileApplicationTest, testInstance = org.xiaozhang.FileApplicationTest@19d27c27, testMethod = test13@FileApplicationTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]], class annotated with @DirtiesContext [false] with mode [null], method annotated with @DirtiesContext [false] with mode [null].
2023-04-24 16:39:03.006 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:03.006 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 3, missCount = 1]
2023-04-24 16:39:03.006 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:03.006 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 4, missCount = 1]
2023-04-24 16:39:03.160 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:03.160 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 5, missCount = 1]
2023-04-24 16:39:03.168 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:03.168 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:03.243 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:03.411 INFO 36120 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
2023-04-24 16:39:04.051 INFO 36120 --- [ main] c.a.d.xa.XATransactionalResource : mysql: refreshed XAResource
2023-04-24 16:39:04.136 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh0')
2023-04-24 16:39:04.158 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.161 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.162 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.165 INFO 36120 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-2} inited
2023-04-24 16:39:04.180 INFO 36120 --- [ main] c.a.d.xa.XATransactionalResource : oracle: refreshed XAResource
2023-04-24 16:39:04.233 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh0')
2023-04-24 16:39:04.234 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.236 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.240 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction commit
2023-04-24 16:39:04.250 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.250 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.251 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.251 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh1')
2023-04-24 16:39:04.252 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.253 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.253 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.253 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh1')
2023-04-24 16:39:04.254 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.256 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.257 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction rollback
回滚数据
2023-04-24 16:39:04.265 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.266 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.266 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.266 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh2')
2023-04-24 16:39:04.267 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.268 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.268 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.269 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh2')
2023-04-24 16:39:04.269 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.270 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.271 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction commit
2023-04-24 16:39:04.277 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.277 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.278 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.278 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh3')
2023-04-24 16:39:04.278 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.280 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.280 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.280 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh3')
2023-04-24 16:39:04.281 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.282 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.283 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction commit
2023-04-24 16:39:04.289 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.289 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.290 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.290 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh4')
2023-04-24 16:39:04.291 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.292 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.292 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.292 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh4')
2023-04-24 16:39:04.293 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.294 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.296 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction rollback
回滚数据
2023-04-24 16:39:04.298 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.298 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.298 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.298 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh5')
2023-04-24 16:39:04.299 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.300 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.301 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.301 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh5')
2023-04-24 16:39:04.302 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.303 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.304 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction rollback
回滚数据
2023-04-24 16:39:04.308 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.308 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.309 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.309 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh6')
2023-04-24 16:39:04.310 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.311 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.312 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.312 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh6')
2023-04-24 16:39:04.312 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.314 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.315 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction rollback
回滚数据
2023-04-24 16:39:04.319 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.319 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.320 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.320 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh7')
2023-04-24 16:39:04.321 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.322 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.323 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.323 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh7')
2023-04-24 16:39:04.325 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.327 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.328 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction commit
2023-04-24 16:39:04.336 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.336 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.336 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.337 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh8')
2023-04-24 16:39:04.338 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.339 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.339 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.340 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh8')
2023-04-24 16:39:04.340 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.341 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.342 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction rollback
回滚数据
2023-04-24 16:39:04.345 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Creating new transaction with name [org.xiaozhang.service.impl.TranscationService.add]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT; 'platformTransactionManager',-java.lang.Exception
2023-04-24 16:39:04.345 WARN 36120 --- [ main] c.a.icatch.imp.TransactionServiceImp : Attempt to create a transaction with a timeout that exceeds maximum - truncating to: 300000
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.345 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.345 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Preparing: insert into test(name) value('hhh9')
2023-04-24 16:39:04.346 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.347 DEBUG 36120 --- [ main] o.x.d.m.M.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
拦截前public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.348 DEBUG 36120 --- [ main] o.s.jdbc.datasource.DataSourceUtils : Fetching JDBC Connection from DataSource
2023-04-24 16:39:04.348 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Preparing: insert into test(name) value('hhh9')
2023-04-24 16:39:04.349 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : ==> Parameters:
2023-04-24 16:39:04.351 DEBUG 36120 --- [ main] o.x.d.o.O.insertCommonSql : <== Updates: 1
执行后public abstract int org.apache.ibatis.executor.Executor.update(org.apache.ibatis.mapping.MappedStatement,java.lang.Object) throws java.sql.SQLException
2023-04-24 16:39:04.351 DEBUG 36120 --- [ main] o.s.t.jta.JtaTransactionManager : Initiating transaction rollback
回滚数据
成功插入4条数据
2023-04-24 16:39:04.356 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:04.356 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 6, missCount = 1]
2023-04-24 16:39:04.357 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:04.357 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 7, missCount = 1]
2023-04-24 16:39:04.357 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:04.357 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 8, missCount = 1]
2023-04-24 16:39:04.358 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:04.358 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 9, missCount = 1]
2023-04-24 16:39:04.359 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:04.359 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 10, missCount = 1]
2023-04-24 16:39:04.360 DEBUG 36120 --- [ main] c.DefaultCacheAwareContextLoaderDelegate : Retrieved ApplicationContext [1293462056] from cache with key [[WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]]]
2023-04-24 16:39:04.360 DEBUG 36120 --- [ main] org.springframework.test.context.cache : Spring test ApplicationContext cache statistics: [DefaultContextCache@11ad095c size = 1, maxSize = 32, parentContextCount = 0, hitCount = 11, missCount = 1]
2023-04-24 16:39:04.361 DEBUG 36120 --- [ main] tractDirtiesContextTestExecutionListener : After test method: context [DefaultTestContext@6cb107fd testClass = FileApplicationTest, testInstance = org.xiaozhang.FileApplicationTest@19d27c27, testMethod = test13@FileApplicationTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]], class annotated with @DirtiesContext [false] with mode [null], method annotated with @DirtiesContext [false] with mode [null].
2023-04-24 16:39:04.361 DEBUG 36120 --- [ main] o.s.t.c.w.ServletTestExecutionListener : Resetting RequestContextHolder for test context [DefaultTestContext@6cb107fd testClass = FileApplicationTest, testInstance = org.xiaozhang.FileApplicationTest@19d27c27, testMethod = test13@FileApplicationTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@710636b0 testClass = FileApplicationTest, locations = '{}', classes = '{class org.xiaozhang.MybatisApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6ae5aa72, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16293aa2, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@5c33f1a9, org.springframework.boot.test.autoconfigure.actuate.metrics.MetricsExportContextCustomizerFactory$DisableMetricExportContextCustomizer@49139829, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@351d00c0, org.springframework.boot.test.context.SpringBootTestArgs@1, org.springframework.boot.test.context.SpringBootTestWebEnvironment@1888ff2c], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true, 'org.springframework.test.context.event.ApplicationEventsTestExecutionListener.recordApplicationEvents' -> false]].
成功4条 其他全部回滚 这里看下数据库