使用YmlFactory或者是直接注入的,或者是其他方式创建的ShardingSphereDataSource由于这个类是被final修饰的,不能使用cglib进行代理,要不然会报错,这里有两种解法。
报错信息:
Caused by: java.lang.IllegalArgumentException:Cannot subclass final class org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereSource
第一,设置成final的,直接生成一个static类型的类级变量用来存放创建后的ShardingSphereDataSource,这样既可,因为static是全局唯一的,在接下来创建SQLSessionFactory或者事务的时候可以用。
第二,修改ShardingSphereDataSource类名,重新注册,但是这里会有个当前使用的代理问题可设置成
@Scope(proxyMode = ScopedProxyMode.INTERFACES)
或者yml中直接设置
proxy-target-class:false
如下:
@Configuration public class ShardingDataSourceConfig implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { String className=ShardingSphereDataSource.class.getName()