package com.biniu.config; import com.alibaba.druid.pool.DruidDataSource; import com.github.pagehelper.PageHelper; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import javax.sql.DataSource; import java.util.Properties; /** * mybatis配置文件 * @author lay * @date 2018/4/23. * @time 15:01 */ @Configuration @EnableTransactionManagement @MapperScan(basePackages = "com.biniu.dao") public class MyBatisConfig implements TransactionManagementConfigurer { @Autowired private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); // 数据源 bean.setDataSource(dataSource); // sql文件 bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml")); // 分页插件 PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); // 禁用分页参数合理化 properties.setProperty("reasonable", "false"); properties.setProperty("supportMethodsArguments", "true"); properties.setProperty("returnPageInfo", "check"); properties.setProperty("params", "count=countSql"); properties.setProperty("helperDialect", "mysql"); pageHelper.setProperties(properties); bean.setPlugins(new Interceptor[]{pageHelper}); return bean.getObject(); } @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return new DruidDataSource(); } /** * 事务注入数据源 * @return */ @Override public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource); } }
springboot开启声明式事务很简单:
1)注解: @EnableTransactionManagement
2) 实现:TransactionManagementConfigurer接口
3)注入数据源
注意:如果存在多数据源的情况,只能指定一个数据源开启声明式事务,否则会报错