多数据源原因造成:
springboot整合mybatis后,直接使用 @EnableTransactionManagement 注解可以开启事务(引用spring-boot-starter-web包,自动开启,不需要使用@EnableTransactionManagement),然后代码中使用 @Transactional 注解即可。
我在项目中使用了neo4j和mybatis的数据源,造成@transactional失效,
在TransactionAutoConfiguration中追踪到transactionManager是neo4j数据源
解决:
@Configuration
public class TransactionConfig {
@Autowired
private DataSource dataSource;
@Bean("transactionManager")
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
上面解决后,数据源默认使用transactionManager,@Tansactional不需要指定数据源
指定数据源可使用
@Transactional("datasource1Tx")
public void setSomethingInDatasource1() { ... }
@Transactional("datasource2Tx")
public void doSomethingInDatasource2() { ... }