读了n多篇文章,如
spring事务(注解 @Transactional )失效的12种场景
Spring——事务注解@Transactional【建议收藏】
讲的都很好,可惜不对症
终于寻得一篇良药
-》springboot 多数据源事务回滚失效,很赞药到病除
原来是配置中没有加对应数据源的事务管理器
以下借鉴大佬的代码
public class DynamicDbConfig {
private static String MYBATIS_CONFIG = "/mybatis-config.xml";
/** * mybatis mapper resource 路径 */
private static String MAPPER_PATH = "/mapping/**/*.xml";
private final DataSource dynamicDS;
@Autowired
public DynamicDbConfig(DataSource dynamicSource) {
this.dynamicDS = dynamicSource;
}
@Bean
public SqlSessionFactory dynamicSqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setConfigLocation(new ClassPathResource(MYBATIS_CONFIG));
PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
String packageSearchPath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + MAPPER_PATH;
factoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources(packageSearchPath));
factoryBean.setDataSource(dynamicDS);
return factoryBean.getObject();
}
****/**
* 一定要加上这个,不然事务回滚失效
* @param dynamicDataSource
* @return
*/
@Bean
public DataSourceTransactionManager transactionManager(DynamicDataSource dynamicDataSource) {
return new DataSourceTransactionManager(dynamicDataSource);
}
在开启事务的方法上指定transactionManager (按你命名的写)
@Override
@Transactional(value = "transactionManager", rollbackFor = Exception.class)
public int addFrom(FromModel fromModel) throws BusinessException, ParseException {
.........
侵删~