这个问题之前出现过一次,和同事讨论了2天,解决了。后来合 了一下master的分支,问题又出现了,但是忘记了解决方法。现在记录一下免得时间长了又忘记了。
问题描述:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'buyerSubjectCollector': Unsatisfied dependency expressed through field 'subjectValueCollects'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'subjectValueCollects' defined in class path resource [bbq-common.xml]: Cannot resolve reference to bean 'identifyBuyerSubjectQuery' while setting bean property 'objectSubjectQueryList' with key [0]; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'identifyBuyerSubjectQuery': Unsatisfied dependency expressed through field 'uicReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicExtraReadServiceClient' while setting bean property 'uicExtraReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicExtraReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicCacheService' while setting bean property 'uicCacheService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicCacheService' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:364) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:123) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:666) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:353) at org.springframework.boot.SpringApplication.run(SpringApplication.java:300) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1082) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1071) at com.wdk.commercial.Application.main(Application.java:32) ... 6 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'subjectValueCollects' defined in class path resource [bbq-common.xml]: Cannot resolve reference to bean 'identifyBuyerSubjectQuery' while setting bean property 'objectSubjectQueryList' with key [0]; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'identifyBuyerSubjectQuery': Unsatisfied dependency expressed through field 'uicReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicExtraReadServiceClient' while setting bean property 'uicExtraReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicExtraReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicCacheService' while setting bean property 'uicCacheService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicCacheService' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:382) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:157) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1533) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1280) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:211) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1131) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583) ... 25 more Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'identifyBuyerSubjectQuery': Unsatisfied dependency expressed through field 'uicReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicExtraReadServiceClient' while setting bean property 'uicExtraReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicExtraReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicCacheService' while setting bean property 'uicCacheService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicCacheService' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:364) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ... 40 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicExtraReadServiceClient' while setting bean property 'uicExtraReadServiceClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicExtraReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicCacheService' while setting bean property 'uicCacheService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicCacheService' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1533) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1280) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:211) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1131) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583) ... 50 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicExtraReadServiceClient' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Cannot resolve reference to bean 'uicCacheService' while setting bean property 'uicCacheService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicCacheService' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1533) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1280) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:551) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ... 63 more Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'uicCacheService' defined in file [/Users/bitidawang/Downloads/software/workspace/wdk-commercial/wdk-commercial-core-start/target/classes/spring/spring-wdk-commercial-uic.xml]: Invocation of init method failed; nested exception is java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1630) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ... 73 more Stopping available components Caused by: java.lang.RuntimeException: UICCacheService-initTair error , unit:null forceNodeGroup: null at com.taobao.uic.common.cache.TairCacheFactory.initTair(TairCacheFactory.java:68) at com.taobao.uic.common.cache.TairCacheFactory.getInstance(TairCacheFactory.java:42) at com.taobao.uic.common.cache.DefaultUICCacheService.initTair(DefaultUICCacheService.java:214) at com.taobao.uic.common.cache.DefaultUICCacheService.init(DefaultUICCacheService.java:163) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1759) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1696) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1626) ... 80 more Caused by: java.lang.RuntimeException: init uicCacheManager failed isNewVersion :true at com.taobao.uic.common.cache.uictair.MultiClusterTairProxyImpl.init(MultiClusterTairProxyImpl.java:107) at com.taobao.uic.common.cache.TairCacheFactory.initTair(TairCacheFactory.java:61) ... 90 more Caused by: java.lang.RuntimeException: com.taobao.tair.impl.mc.ShieldTairManager was loaded by com.taobao.pandora.boot.loader.ReLaunchURLClassLoader@6da9dc6, it should be loaded by Pandora Container. Can not load this fake sdk class. please refer to xxxx(这里是文档地址,公司保密协议不好透露) for the solution. at com.taobao.tair.impl.mc.ShieldTairManager.<init>(ShieldTairManager.java) at com.taobao.uic.common.cache.tair.ShieldTairCacheManager.init(ShieldTairCacheManager.java:32) at com.taobao.uic.common.cache.uictair.MultiClusterTairProxyImpl.init(MultiClusterTairProxyImpl.java:103) ... 91 more
解决办法先放在前面:
快捷键搜索com.taobao.tair.impl.mc.ShieldTairManager,仔细看,出现在两个包里,按照自己的业务,在所有子模块中根据maven help插件搜索,排除掉其中一个。
解决路程:
看到报错一大堆,前面的基本都不用管,看最后报错比较简短的那一句。
com.taobao.tair.impl.mc.ShieldTairManager was loaded by com.taobao.pandora.boot.loader.ReLaunchURLClassLoader@6da9dc6, it should be loaded by Pandora Container. Can not load this fake sdk class. please refer to xxxx(这里是文档地址,公司保密协议不好透露) for the solution
意思是说ShieldTairManager 这个类是Pandora Container容器加载的,请参考某某文档解决,
复制下来文档链接在浏览器打开,发现没有权限,阿里的权限控制是做的比较严格的,到处都限制,好吧,那就不看文档了。
按照需要Pandora Container容器加载的思路,脑海里出现各种假设,难道这个类被别的人修改过了?难道本地启动不起来了吗?难道我本地启动的不是Pandora Container容器吗?
思路错了就会把你带到无尽的深渊当中。
无意当中拷贝了com.taobao.tair.impl.mc.ShieldTairManager,快捷键在项目中搜索,发现这个类出现在两个jar包中,
按照之前本地debug段点调试,发现一个奇怪的现象,
什么?构造器中构造一个对象时你直接给我抛出一个异常??抛出的异常和项目启动时候抛出的异常是一样的,com.taobao.tair.impl.mc.ShieldTairManager was loaded by..........
看看ShieldTairManager出现在哪个jar包中,发现出现在一个A包中和一个B包中,B包是自己的外部依赖C引进来的,是需要的,那就把A包从项目中排除吧,
好吧,搜索各个子模块,去掉A包,项目本地启动,完美解决。
小经验总结:
1.看异常看最后一个报错,最后一个一般才是错误的主要原因。注意是一般。
2.思路错了会带你到无尽的深渊,一条路走不通试试另一条路。
3.一个类出现在两个jar包中,会出现奇怪的问题,必须排除掉其中一个或者改变依赖顺序。
4.要坚韧,要有耐心。
----------天道酬勤----------------