StackTraces
Spring AI已验证

Spring AI 报 NoSuchBeanDefinitionException

@debug_master32 天前更新阅读 6 min00

这个 NoSuchBeanDefinitionException 不是普通的“你没声明 Bean”,而是 Spring AI 某些版本里把 VertexAiEmbeddingConnectionAutoConfiguration 的导入链条弄丢了。问题出在框架自动配置,不在你业务代码。

Issue & Env(案发现场与环境)

  • 业务场景:项目接入 Vertex AI Embedding,升级 Spring AI 后启动失败。
  • 已知线索:上游 issue #4875 明确指出,某次变更后 VertexAiEmbeddingConnectionAutoConfiguration 不再通过相关自动配置链路被导入。

StackTrace(堆栈日志)

上游 issue 给出的异常是 NoSuchBeanDefinitionException,但如果用 @Value / 构造器注入,进入 Spring 容器后经常会先经过一层 BeanCreationException,完整堆栈是:

org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'vertexAiEmbeddingModel': Injection of autowired dependencies failed
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:782)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1391)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1220)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:534)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1047)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type
'org.springframework.ai.vertexai.embedding.VertexAiEmbeddingConnectionDetails'
available: expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1804)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1363)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1318)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911)

它往往出现在应用上下文初始化阶段,而不是运行时调用阶段。要定位是不是自动配置导入丢了,可以看启动时的 CONDITIONS EVALUATION REPORT——VertexAiEmbeddingConnectionAutoConfiguration 显示为 did not match,而报告里并没有提到显式排除。

Reproduce(复现代码)

这类问题通常不是复现代码复杂,而是版本一升级就触发。应用本身可能只是普通的 starter 配置:

<dependency>
  <groupId>org.springframework.ai</groupId>
  <artifactId>spring-ai-starter-model-vertex-ai-embedding</artifactId>
  <version>1.1.x</version>
</dependency>

应用代码甚至不用显式写任何 VertexAiEmbeddingConnectionDetails Bean,只靠 starter 的自动配置启动。升级到受影响版本后,就会在启动时直接报缺 Bean。

Root Cause(根因分析)

issue #4875 已经把根因说得很清楚:某次改动之后,VertexAiEmbeddingConnectionAutoConfiguration 以及一批类似的自动配置类,不再包含在相关 @ImportAutoConfiguration 注解里;同时,它们也没有被补进 org.springframework.boot.autoconfigure.AutoConfiguration.imports。

结果就是:

  1. 你的 starter 依赖还在;
  2. 业务代码没变;
  3. 但 Spring Boot 自动配置链路里,负责提供 VertexAiEmbeddingConnectionDetails 的那段丢了;
  4. 最终下游构造器注入时就只能抛 NoSuchBeanDefinitionException。

这类问题特别容易误导人,因为异常长得像“你自己少写了一个 Bean”,但实际上它是框架回归。

The Fix(解决方案)

首选:升级到带修复的版本

上游 PR #4990 的目的就是“Add missing auto-configuration classes”。维护者在 PR 评论里明确说明,修复已经推到:

  • main
  • 1.1.x

也就是说,最佳方案不是自己长期打补丁,而是升级到包含该修复的版本。

临时绕行:显式导入缺失的自动配置

如果你当前还不能升级,可以按 issue #4875 的提示,手动把缺失的自动配置类补回来。例如:

@Configuration
@ImportAutoConfiguration(VertexAiEmbeddingConnectionAutoConfiguration.class)
class VertexAiEmbeddingFixConfiguration {
}

这个方案的本质是:既然框架没自动导入,那就先由你显式导入。

别误把问题修成业务层 Bean

很多人看到 NoSuchBeanDefinitionException,第一反应是手写一个同名 Bean。这个方向通常不推荐,因为:

  • 你补的是框架内部连接细节对象,不是业务接口;
  • 就算临时补上,也可能绕开框架原本的装配语义;
  • 后续一升级,又可能和官方修复冲突。

所以更稳的方向是“恢复正确的自动配置链路”,而不是“手搓一个假的替代 Bean”。

小结

  • VertexAiEmbeddingConnectionDetails 缺失,不一定是你业务代码的问题。
  • 这次问题的根因,是 Spring AI 某些版本里自动配置导入链条漏了。
  • 最稳的修复是升级到包含 PR #4990 的版本。
  • 临时无法升级时,再显式导入 VertexAiEmbeddingConnectionAutoConfiguration 兜底。

References(参考来源)

最后更新于 2026-09-09

这篇帮到你了吗?

刚解决了一个棘手的报错?花两分钟记录下来,帮助下一个遇到同样问题的开发者。

贡献一条解法