com.baomidou.dynamic.datasource.annotation.DS通过spel指定数据源遇到问题
·
com.baomidou.dynamic.datasource.annotation.DS通过spel指定数据源遇到问题
1.通过@DS(“T(xxx.class).getDataSource()”))方式切换失效
@DS如果用在方法上通过方法参数指定数据源 例如@DS(“#dsName”)此时会正常切换数据源,但是通过类的方法调用(比如:@DS(“T(xxx.class).getDataSource()”))动态切换时不成功,,主要是下面问题导致的:
在源码DynamicDataSourceAnnotationInterceptor.determineDatasourceKey()中,获取到数据源后,通过条件匹配判定,代码如下:
private static final String DYNAMIC_PREFIX = "#";
private String determineDatasourceKey(MethodInvocation invocation) {
String key = dataSourceClassResolver.findKey(invocation.getMethod(), invocation.getThis(), DS.class);
return key.startsWith(DYNAMIC_PREFIX) ? dsProcessor.determineDatasource(invocation, key) : key;
}
只匹配以#开头的,所以通过类的方式动态切换失效
解决方法
通过添加方法绑定或下载源码下来后手动维护
2.在@Transactional中@DS切换失败
@Transactional需要保证事务一致性问题,所以只有一个链接,只有@DS注解是不会切换数据源的
解决方法
通过新开事务的方式,即:@Transactional(propagation = Propagation.REQUIRES_NEW)的方式
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)