背景
项目是基于gradle构建的spring boot项目。切换k8s环境的时候,gradle构建镜像,构建成功,在k8s运行不起来。
打包命令
gradle clean
gradle build -x test
报错信息
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'extraDayController' defined in URL [jar:file:/home/david/projects/mkt-server/build/libs/mkt-server-1.0.0-SNAPSHOT.jar!/BOOT-INF/classes!/com/mkt/server/controller/ExtraDayController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'extraDayServiceImpl' defined in URL [jar:file:/home/david/projects/mkt-server/build/libs/mkt-server-1.0.0-SNAPSHOT.jar!/BOOT-INF/classes!/com/mkt/server/service/impl/ExtraDayServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.mkt.server.client.OldFixUserClient': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webMvcConfig': Unsatisfied dependency expressed through field 'loginInterceptor'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'loginInterceptor': Unsatisfied dependency expressed through field 'portalClient'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.mkt.server.client.protal.PortalClient': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'mvcResourceUrlProvider': Requested bean is currently in creation: Is there an unresolvable circular reference?
核心报错信息
Requested bean is currently in creation: Is there an unresolvable circular reference?
问题定位
错误定位
将gradle的jar包单独拿出来运行,运行失败,报上面的错。项目在idea中,可以正常运行,不报错。
在切换环境的时候,出的问题,没有代码修改。
将问题定位为gradle构建的问题,而且换了一个电脑,构建运行成功,把另外一个电脑构建成功的jar包,拿到运行失败的电脑上可以正常运行。(同样的gradle版本,同样jdk版本,同样的操作系统版本)
就这样开始了2天的痛苦排查解决历程。
正确定位
跟同事讨论,以前遇到类似的问题,解决循环依赖就可以了。
解决
加@Lazy注解。
思考
1.为什么解决这么久,还解决不了?
否定循环依赖,认为是编译问题。如果排除所有错误选项,剩下的一个无论多么难以致信,也要去试试。
2.排查问题的收获?
同样的代码,同样的gradle版本,同样的操作系统版本,构建的项目运行不一样。以后能不用gradle,建议不要用了。
结论时间:2024-05-23.