springMvc mybatis SqlSession.rollback回滚无效原因

很长没做过Java开发了,最近想捡起来,遇到回滚问题。

再官网上看到,openSession=false就可以回滚了,但是用session.getConnection().getAutoCommit()查看还是true,不管再怎么设置都是true,然后就一步步调试,然后发现问题出在。DataSource上
我用的是org.apache.tomcat.dbcp.dbcp.BasicDataSource,所以setDefaultAutoCommit设置成false就可以了,这个时候你再调用session.getConnection().getAutoCommit()就会发现是false了,

import java.io.IOException;

import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

//@EnableTransactionManagement(proxyTargetClass=true)//事务
@Configuration
public class MybatisConfig
{
    /**
     * 数据源
     */
    private BasicDataSource getDataSource()
    {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setInitialSize(1);
        dataSource.setMaxActive(5);
        dataSource.setMaxIdle(5);
        dataSource.setMinIdle(1);
        dataSource.setDefaultAutoCommit(false);
        return dataSource;
    }
    
    @Bean("sqlSessionFactory")
    public SqlSessionFactoryBean getSqlSessionFactoryBean()
    {
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(getDataSource());
        sqlSessionFactory.setConfigLocation(resolver.getResource("classpath:com/ssm/mapping/typeAlises.xml"));
        
        try 
        {
            sqlSessionFactory.setTransactionFactory(new ManagedTransactionFactory());
            sqlSessionFactory.setMapperLocations(resolver.getResources("classpath:com/ssm/mapping/*Mapping.xml"));
        } 
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return sqlSessionFactory;
    }
    
//  @Bean("tx1")
//  public PlatformTransactionManager txManager()
//  {
//      DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
//      transactionManager.setDataSource(getDataSource());
//      return transactionManager;
//  }
}

项目用JavaConfig注解方式配置,xml配置自己另外配置吧

你可能感兴趣的:(springMvc mybatis SqlSession.rollback回滚无效原因)