StackTraces
LangChain4j已验证

LangChain4j Starter 与 Spring Boot 4 不兼容

@debug_master13 天前更新阅读 6 min00

把 Spring Boot 升到 4.x 再接 LangChain4j starter,应用起不来,挂在 ConfigurationClassPostProcessor 阶段,报 Failed to generate bean name for imported class。这不是 Bean 实例化出错,是配置类压根没注册上。维护者讨论过同一模块难兼容 3.x 与 4.x,截至撰写时适配仍在进行中。生产环境别硬升 4.x,先把 Spring Boot 锁回 3.5.x。

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

  • 业务场景:Spring Boot 项目引入 LangChain4j 的 starter,想靠自动配置拿到模型 Bean,一启动就失败。
  • 环境:Spring Boot 4.0(对应 Spring Framework 7),LangChain4j starter 按 Spring Boot 3.x 的约定编译,JDK 17+。
  • 这里以 langchain4j-open-ai-spring-boot-starter 为例,报错里的配置类是 dev.langchain4j.openai.spring.AutoConfig。

StackTrace(堆栈日志)

报错原文(来自 issue #4268):

Caused by: java.lang.IllegalStateException: Failed to generate bean name for imported class 'dev.langchain4j.openai.spring.AutoConfig'
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.registerBeanDefinitionForImportedConfigurationClass(ConfigurationClassBeanDefinitionReader.java:172)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:145)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:124)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:458)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:310)

Reproduce(复现代码)

用 Spring Boot 4 的父 POM,再引 starter:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>4.0.0</version>
</parent>

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
</dependency>

只要 starter 在 classpath 上,哪怕还没写模型配置,启动就会挂。

Root Cause(根因分析)

先看报错的位置。调用栈是 ConfigurationClassPostProcessor,属于 ApplicationContext refresh 的早期。这时还没走到实例化 Bean,框架正在读配置类。问题出在「读取配置类」这一步,跟模型参数、API key 都无关。

Spring Boot 4 随 Spring Framework 7 一起来。这一版对配置类处理和自动配置导入改动较大。LangChain4j starter 内部的 AutoConfig 仍按旧约定写,在 Spring Boot 4 下无法被正常注册为配置类,启动直接失败。

维护者讨论(issue #4268):同一个 langchain4j-spring 模块很难同时兼容 Spring Boot 3.x 与 4.x。讨论过「同一模块发两个版本」的方向。具体工作在 langchain4j-spring PR #153,仍属进行中。

一句话,截至撰写时 Spring Boot 4 支持还没修好,别当成已解决。

The Fix(解决方案)

短期最省事的做法是回退。把 Spring Boot 锁回 3.x,和 starter 的编译目标对齐:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.0</version>
</parent>

先确认依赖版本,再动手升级:

mvn dependency:tree -Dincludes=dev.langchain4j
./gradlew dependencies | grep -E "langchain4j|spring-boot"

看清 starter 的版本和 Spring Boot 的大版本。注意 Spring Boot 4 的 starter 坐标与包名,在大版本之间也可能变。

盯紧 langchain4j-spring PR #153 的合入进度。生产上别硬升 Spring Boot 4。

如果非要在 Spring Boot 4 上跑,目前只能不用官方 starter,手动声明模型 Bean:

@Configuration
public class ModelConfig {

    @Bean
    public OpenAiChatModel openAiChatModel() {
        return OpenAiChatModel.builder()
                .apiKey(System.getenv("OPENAI_API_KEY"))
                .modelName("gpt-4o-mini")
                .build();
    }
}

代价是丢掉自动配置的便利。这属于 workaround,不推荐长期用。

小结

根子在版本。Spring Boot 4 改了配置类处理,LangChain4j starter 没跟上。短期锁回 3.5.x,长期等 PR #153。真要硬上 4.x,只能手写 Bean。

References(参考来源)

最后更新于 2026-09-28

这篇帮到你了吗?

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

贡献一条解法