Pod进入CrashBackLoop状态,多环境部署表现不一致问题咨询
报错信息
{ "mdc": {}, "timestamp": "2021-06-01 09:38:03.582", "level": "ERROR", "logger": "org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter", "message": "\n\n***************************\nAPPLICATION FAILED TO START\n***************************\n\nDescription:\n\nField bac in com.anjana.ms.anjana.ouseph.resources.services.implementation.anjanaValidator required a bean of type 'anjana.wrapper.IBAC' that could not be found.\n\nThe injection point has the following annotations:\n\t- @javax.inject.Inject()\n\n\nAction:\n\nConsider defining a bean of type 'anjana.wrapper.IBAC' in your configuration.\n", "exception": "" }
跨环境部署异常的根因分析
该报错本质是Spring上下文初始化时,找不到anjana.wrapper.IBAC类型的可注入Bean,Jenkins构建、单测和另一个环境运行正常,说明代码本身没有语法错误,仅为环境间的Spring装配规则、依赖配置不一致导致,具体可能的场景如下:
- 多环境Profile未匹配:IBAC的实现类大概率标注了
@Profile注解,仅在正常运行的环境对应的Profile下才会被注册为Bean,故障环境启动时未激活对应Profile,导致Bean未加载。 - 组件扫描范围差异:故障环境的Spring配置中,
@ComponentScan的扫描路径未包含IBAC实现类所在的包,或是实现类上的@ConditionalOnProperty装配开关,在故障环境的配置文件中没有开启。 - 部署包依赖不一致:虽然构建过程正常,但可能故障环境使用的部署包打包时遗漏了包含IBAC实现类的依赖Jar,或是两个环境使用的依赖版本不统一,故障环境所用的依赖版本中不存在该IBAC的实现类。可解压两个环境的部署Jar,对比
BOOT-INF/lib目录下的依赖清单确认。 - 类加载优先级冲突:故障环境的容器、公共依赖中存在同名的
anjana.wrapper.IBAC接口,类加载优先级高于应用内置的接口,导致Spring无法匹配到对应实现类。 - 条件装配规则不满足:如果IBAC是通过
@Bean方法手动注册的,且注册逻辑依赖环境变量、配置项判断,故障环境缺少对应参数会导致条件不触发,Bean不会被实例化。
内容的提问来源于stack exchange,提问作者Anjana Ouseph
相关产品推荐
相关产品推荐

