项目场景:
多数据源配置切换
问题描述
配置的多数据源,数据源在用aop切换时没有生效
原因分析:
aop不执行原因
1、在调用方法上加了@Transactional时失效
2、调用时使用的是private
3、同一类中直接调用
解决方案:
在调用时注入本类
@Service
@Slf4j
public class DataThreadServiceImpl implements IDataThreadService {
@Autowired
private IDataThreadService iDataThreadService;
@Override
@DataSource(value = DataSourceType.MASTER)
public List<Map<String, Object>> master(String tableName) {
return getDataOneList(tableName);
}
@Override
@DataSource(value = DataSourceType.SLAVE3)
public Integer slave3(String tableName, List<Map<String, Object>> list){
return iDataThreadService.setDataOneList(tableName,list);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void setDataOneList(String tableName, List<Map<String, Object>> list) {
//TODO 执行SQL
}
@Override
public void backup(String type) {
//查询需备份的数据
List<Map<String, Object>> dataOneList = iDataThreadService.master(type);
if (dataOneList == null || dataOneList.size() < 1) {
return;
}
Integer integer = iDataThreadService.slave(type, dataOneList);
}
}