很长没做过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配置自己另外配置吧
网友评论