SpringBoot整合atomikos实现多数据源全局事务

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);
    }

}

  1. 配置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);
	}

}

  1. 创建测试类 和业务类 进行使用并测试
    指定下atomikos全局事务管理器
    使用spring的@Transactional注解就可以 指定下我们配置的 atomikos全局事务管理器
    就可以使用啦
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/f44e19e2605f4d32b9400f6522191a7c.png

这里看下输出日志

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条 其他全部回滚 这里看下数据库
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值