liu
2026-10-19 e373bbe57d3782260787622c7aaf2bb9aa01fffe
yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java
@@ -1,6 +1,24 @@
package cn.iocoder.yudao.server;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.model.anthropic.autoconfigure.AnthropicChatAutoConfiguration;
import org.springframework.ai.model.deepseek.autoconfigure.DeepSeekChatAutoConfiguration;
import org.springframework.ai.model.google.genai.autoconfigure.chat.GoogleGenAiChatAutoConfiguration;
import org.springframework.ai.model.google.genai.autoconfigure.embedding.GoogleGenAiEmbeddingConnectionAutoConfiguration;
import org.springframework.ai.model.google.genai.autoconfigure.embedding.GoogleGenAiTextEmbeddingAutoConfiguration;
import org.springframework.ai.model.openai.autoconfigure.OpenAiAudioSpeechAutoConfiguration;
import org.springframework.ai.model.openai.autoconfigure.OpenAiAudioTranscriptionAutoConfiguration;
import org.springframework.ai.model.openai.autoconfigure.OpenAiChatAutoConfiguration;
import org.springframework.ai.model.openai.autoconfigure.OpenAiEmbeddingAutoConfiguration;
import org.springframework.ai.model.openai.autoconfigure.OpenAiImageAutoConfiguration;
import org.springframework.ai.model.openai.autoconfigure.OpenAiModerationAutoConfiguration;
import org.springframework.ai.model.ollama.autoconfigure.OllamaApiAutoConfiguration;
import org.springframework.ai.model.ollama.autoconfigure.OllamaChatAutoConfiguration;
import org.springframework.ai.model.ollama.autoconfigure.OllamaEmbeddingAutoConfiguration;
import org.springframework.ai.model.stabilityai.autoconfigure.StabilityAiImageAutoConfiguration;
import org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration;
import org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration;
import org.springframework.ai.vectorstore.redis.autoconfigure.RedisVectorStoreAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
@@ -16,7 +34,34 @@
 */
@Slf4j
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package}
@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"})
@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}.server", "${yudao.info.base-package}.module"},
        // 注意:这里排除的 Spring AI 自动配置,与各 profile 的 spring.autoconfigure.exclude 保持一致,但写在代码里的
        // 原因是:注解里的排除项与 yaml 里的排除项是「并集」,不会被外部 profile 配置文件覆盖,保证换任何 profile 都能正常启动。
        // 1. 向量库:AI 模块由 AiModelFactoryImpl 手动构建 VectorStore,三个自动配置同时启用会争抢 vectorStore 这个 bean 名
        // 2. 模型:AI 模块的模型由 AiModelFactoryImpl 手动构建(走 DB 里 ai_model 配置的 apiKey),不需要 Spring AI 的模型 Bean;
        //    且未配置 api-key 时自动配置会在启动阶段直接抛「API key cannot be empty.」
        exclude = {
                // ========== 向量库自动配置 ==========
                QdrantVectorStoreAutoConfiguration.class,
                RedisVectorStoreAutoConfiguration.class,
                MilvusVectorStoreAutoConfiguration.class,
                // ========== 模型自动配置 ==========
                OpenAiChatAutoConfiguration.class,
                OpenAiEmbeddingAutoConfiguration.class,
                OpenAiImageAutoConfiguration.class,
                OpenAiAudioSpeechAutoConfiguration.class,
                OpenAiAudioTranscriptionAutoConfiguration.class,
                OpenAiModerationAutoConfiguration.class,
                DeepSeekChatAutoConfiguration.class,
                AnthropicChatAutoConfiguration.class,
                GoogleGenAiChatAutoConfiguration.class,
                GoogleGenAiEmbeddingConnectionAutoConfiguration.class,
                GoogleGenAiTextEmbeddingAutoConfiguration.class,
                OllamaApiAutoConfiguration.class,
                OllamaChatAutoConfiguration.class,
                OllamaEmbeddingAutoConfiguration.class,
                StabilityAiImageAutoConfiguration.class,
        })
public class YudaoServerApplication {
    public static void main(String[] args) {