Closed Rushing0711 closed 5 months ago
Please fill it out carefully, or it will be closed. 请认真填写,不然会直接关闭。
JDK Version(required): 1.8
SpringBoot Version(required): 2.4.11
dynamic-datasource-spring-boot-starter Version(required): 3.5.2
druid Version(optional): 1.1.22
我项目中有一个SysService,标注了@DS("common"),然后把这个类封装到jar包了。 我的业务系统引入了这个jar,启动后调用SysService发现并不能代理到对应数据源上。 初步排查,发现DynamicDataSourceAnnotationAdvisor并未被执行,进一步排查AbstractAdvisorAutoProxyCreator#findEligibleAdvisors方法,发现对SysService执行后,把这个Advisor过滤掉了,原因是Advisor也是一个isCurrentlyInCreation的bean。更细的原因没能找到,感觉和服务加载有关系。
然后,我又添加一个jar,这个jar中被拦截到了,但之前的jar还是不行。 我的SysService是通过@ComponentScan扫描的,两个jar都是这样的。 尝试过@AutoConfigureOrder和@AutoConfigureAfter(DynamicDataSourceAutoConfiguration.class),也是无效的。
Expected Result: 期望2个jar中的服务,标注了@DS都能被拦截到,能切换数据源。
Actual Result: 一个jar能成功,另外一个jar未能被拦截到。两个jar都是在一个@Configuration的类上使用了@ComponentScan加载对应包的服务的。
If there is an exception,or aop invalid,please attach the exception trace:
Just paste your stack trace here!
Step 1
Step 2
Step 3
这种问题我估计只有等待非常熟悉AOP完整机制的人才可能回答你
Please fill it out carefully, or it will be closed. 请认真填写,不然会直接关闭。
Enviroment
JDK Version(required): 1.8
SpringBoot Version(required): 2.4.11
dynamic-datasource-spring-boot-starter Version(required): 3.5.2
druid Version(optional): 1.1.22
Describe what happened
我项目中有一个SysService,标注了@DS("common"),然后把这个类封装到jar包了。 我的业务系统引入了这个jar,启动后调用SysService发现并不能代理到对应数据源上。 初步排查,发现DynamicDataSourceAnnotationAdvisor并未被执行,进一步排查AbstractAdvisorAutoProxyCreator#findEligibleAdvisors方法,发现对SysService执行后,把这个Advisor过滤掉了,原因是Advisor也是一个isCurrentlyInCreation的bean。更细的原因没能找到,感觉和服务加载有关系。
然后,我又添加一个jar,这个jar中被拦截到了,但之前的jar还是不行。 我的SysService是通过@ComponentScan扫描的,两个jar都是这样的。 尝试过@AutoConfigureOrder和@AutoConfigureAfter(DynamicDataSourceAutoConfiguration.class),也是无效的。
Expected Result: 期望2个jar中的服务,标注了@DS都能被拦截到,能切换数据源。
Actual Result: 一个jar能成功,另外一个jar未能被拦截到。两个jar都是在一个@Configuration的类上使用了@ComponentScan加载对应包的服务的。
If there is an exception,or aop invalid,please attach the exception trace:
Steps to reproduce
Step 1
Step 2
Step 3