3个高效步骤:ncmdump开源工具实现NCM音乐格式自由转换

核心内容摘要

为什么选择ChilliCream GraphQL平台:5大核心优势解析
ISTA 3A测试有哪些?ISTA 3A测试的目的是什么?以及ISTA 3A包装测试的类别有哪些?

如何实现iOS设备跨版本降级?专业工具全攻略

在使用 Spring Boot LangChain4j 开发 AI 应用时在 Service 工厂中注入如下两个BeanResourceprivateStreamingChatModelopenAiStreamingChatModel;ResourceprivateStreamingChatModelreasoningStreamingChatModel;一切看起来都很合理但启动时就报如下错误❌Bean namedopenAiStreamingChatModelis expected to be oftypedev.langchain4j.model.chat.StreamingChatModelbut was actually oftypedev.langchain4j.model.openai.OpenAiStreamingChatModel最诡异的是OpenAiStreamingChatModel明明是StreamingChatModel的子类期望类型和实际类型“看起来完全兼容”但还是报错原因分析这个错误的根源其实不是代码逻辑的问题而是spring-boot-devtools的热部署机制导致的类加载冲突。

Spring Boot DevTools 为了实现快速重启使用了两个类加载器。

一个是Base ClassLoader主要负责加载Spring Boot 框架、第三方 jar比如 langchain4j-core.jar另一个是Restart ClassLoader主要负责加载自己的项目代码比如src/main/java。

默认情况下DevTools 会把 所有非项目代码的 jar 放入 Base ClassLoader。

但是LangChain4j 这类库通过 Maven 引入它其实是属于“第三方依赖”理应由Base ClassLoader加载。

然而在某些版本或配置下DevTools 可能错误地将部分LangChain4j类交给了Restart ClassLoader。

这样就造成同一个类有两个身份这样 JVM 认为这是两个完全无关的类。

即使包名、类名、继承关系都对也无法进行类型转换或赋值。

解决方案

在项目的如下目录中创建文件src/main/resources/META-INF/spring-devtools.properties

文件内容如下主要目的是告诉 DevTools这些 jar 属于基础类路径统一用Base ClassLoader加载。

restart.include.langchain4j/langchain4j-.*\.jar restart.include.openai/openai-.*\.jar

重新运行问题解决。

911行情电视在线观看苹果-911行情电视在线观看苹果应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123