聊聊Spring AI autoconfigure模块的拆分
序
本文主要研究一下Spring AI autoconfigure模块的拆分
v1.0.0-M6版本
(base) ➜ spring-ai-spring-boot-autoconfigure git:(v1.0.0-M6) tree -L 9
.
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── autoconfigure
│ │ │ ├── anthropic
│ │ │ │ ├── AnthropicAutoConfiguration.java
│ │ │ │ ├── AnthropicChatProperties.java
│ │ │ │ └── AnthropicConnectionProperties.java
│ │ │ ├── azure
│ │ │ │ └── openai
│ │ │ ├── bedrock
│ │ │ │ ├── BedrockAwsConnectionConfiguration.java
│ │ │ │ ├── BedrockAwsConnectionProperties.java
│ │ │ │ ├── cohere
│ │ │ │ ├── converse
│ │ │ │ └── titan
│ │ │ ├── chat
│ │ │ │ ├── client
│ │ │ │ ├── memory
│ │ │ │ ├── model
│ │ │ │ └── observation
│ │ │ ├── embedding
│ │ │ │ └── observation
│ │ │ ├── huggingface
│ │ │ │ ├── HuggingfaceChatAutoConfiguration.java
│ │ │ │ └── HuggingfaceChatProperties.java
│ │ │ ├── image
│ │ │ │ └── observation
│ │ │ ├── minimax
│ │ │ │ ├── MiniMaxAutoConfiguration.java
│ │ │ │ ├── MiniMaxChatProperties.java
│ │ │ │ ├── MiniMaxConnectionProperties.java
│ │ │ │ ├── MiniMaxEmbeddingProperties.java
│ │ │ │ └── MiniMaxParentProperties.java
│ │ │ ├── mistralai
│ │ │ │ ├── MistralAiAutoConfiguration.java
│ │ │ │ ├── MistralAiChatProperties.java
│ │ │ │ ├── MistralAiCommonProperties.java
│ │ │ │ ├── MistralAiEmbeddingProperties.java
│ │ │ │ └── MistralAiParentProperties.java
│ │ │ ├── moonshot
│ │ │ │ ├── MoonshotAutoConfiguration.java
│ │ │ │ ├── MoonshotChatProperties.java
│ │ │ │ ├── MoonshotCommonProperties.java
│ │ │ │ └── MoonshotParentProperties.java
│ │ │ ├── oci
│ │ │ │ └── genai
│ │ │ ├── ollama
│ │ │ │ ├── OllamaAutoConfiguration.java
│ │ │ │ ├── OllamaChatProperties.java
│ │ │ │ ├── OllamaConnectionDetails.java
│ │ │ │ ├── OllamaConnectionProperties.java
│ │ │ │ ├── OllamaEmbeddingProperties.java
│ │ │ │ └── OllamaInitializationProperties.java
│ │ │ ├── openai
│ │ │ │ ├── OpenAiAudioSpeechProperties.java
│ │ │ │ ├── OpenAiAudioTranscriptionProperties.java
│ │ │ │ ├── OpenAiAutoConfiguration.java
│ │ │ │ ├── OpenAiChatProperties.java
│ │ │ │ ├── OpenAiConnectionProperties.java
│ │ │ │ ├── OpenAiEmbeddingProperties.java
│ │ │ │ ├── OpenAiImageProperties.java
│ │ │ │ ├── OpenAiModerationProperties.java
│ │ │ │ └── OpenAiParentProperties.java
│ │ │ ├── postgresml
│ │ │ │ ├── PostgresMlAutoConfiguration.java
│ │ │ │ └── PostgresMlEmbeddingProperties.java
│ │ │ ├── qianfan
│ │ │ │ ├── QianFanAutoConfiguration.java
│ │ │ │ ├── QianFanChatProperties.java
│ │ │ │ ├── QianFanConnectionProperties.java
│ │ │ │ ├── QianFanEmbeddingProperties.java
│ │ │ │ ├── QianFanImageProperties.java
│ │ │ │ └── QianFanParentProperties.java
│ │ │ ├── retry
│ │ │ │ ├── SpringAiRetryAutoConfiguration.java
│ │ │ │ └── SpringAiRetryProperties.java
│ │ │ ├── stabilityai
│ │ │ │ ├── StabilityAiConnectionProperties.java
│ │ │ │ ├── StabilityAiImageAutoConfiguration.java
│ │ │ │ ├── StabilityAiImageProperties.java
│ │ │ │ └── StabilityAiParentProperties.java
│ │ │ ├── transformers
│ │ │ │ ├── TransformersEmbeddingModelAutoConfiguration.java
│ │ │ │ └── TransformersEmbeddingModelProperties.java
│ │ │ ├── vectorstore
│ │ │ │ ├── CommonVectorStoreProperties.java
│ │ │ │ ├── azure
│ │ │ │ ├── cassandra
│ │ │ │ ├── chroma
│ │ │ │ ├── cosmosdb
│ │ │ │ ├── elasticsearch
│ │ │ │ ├── gemfire
│ │ │ │ ├── hanadb
│ │ │ │ ├── mariadb
│ │ │ │ ├── milvus
│ │ │ │ ├── mongo
│ │ │ │ ├── neo4j
│ │ │ │ ├── observation
│ │ │ │ ├── opensearch
│ │ │ │ ├── oracle
│ │ │ │ ├── pgvector
│ │ │ │ ├── pinecone
│ │ │ │ ├── qdrant
│ │ │ │ ├── redis
│ │ │ │ ├── typesense
│ │ │ │ └── weaviate
│ │ │ ├── vertexai
│ │ │ │ ├── embedding
│ │ │ │ └── gemini
│ │ │ ├── watsonxai
│ │ │ │ ├── WatsonxAiAutoConfiguration.java
│ │ │ │ ├── WatsonxAiChatProperties.java
│ │ │ │ ├── WatsonxAiConnectionProperties.java
│ │ │ │ └── WatsonxAiEmbeddingProperties.java
│ │ │ └── zhipuai
│ │ │ ├── ZhiPuAiAutoConfiguration.java
│ │ │ ├── ZhiPuAiChatProperties.java
│ │ │ ├── ZhiPuAiConnectionProperties.java
│ │ │ ├── ZhiPuAiEmbeddingProperties.java
│ │ │ ├── ZhiPuAiImageProperties.java
│ │ │ └── ZhiPuAiParentProperties.java
│ │ └── resources
│ │ └── META-INF
│ │ ├── additional-spring-configuration-metadata.json
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ ├── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── autoconfigure
│ │ ├── anthropic
│ │ │ ├── AnthropicAutoConfigurationIT.java
│ │ │ ├── AnthropicPropertiesTests.java
│ │ │ └── tool
│ │ ├── azure
│ │ │ ├── AzureOpenAiAutoConfigurationIT.java
│ │ │ ├── AzureOpenAiAutoConfigurationPropertyTests.java
│ │ │ ├── AzureOpenAiDirectOpenAiAutoConfigurationIT.java
│ │ │ └── tool
│ │ ├── bedrock
│ │ │ ├── BedrockAwsConnectionConfigurationIT.java
│ │ │ ├── BedrockTestUtils.java
│ │ │ ├── RequiresAwsCredentials.java
│ │ │ ├── cohere
│ │ │ ├── converse
│ │ │ └── titan
│ │ ├── chat
│ │ │ ├── client
│ │ │ ├── memory
│ │ │ ├── model
│ │ │ └── observation
│ │ ├── embedding
│ │ │ └── observation
│ │ ├── huggingface
│ │ │ └── HuggingfaceChatAutoConfigurationIT.java
│ │ ├── image
│ │ │ └── observation
│ │ ├── minimax
│ │ │ ├── FunctionCallbackInPromptIT.java
│ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java
│ │ │ ├── MiniMaxAutoConfigurationIT.java
│ │ │ ├── MiniMaxFunctionCallbackIT.java
│ │ │ ├── MiniMaxPropertiesTests.java
│ │ │ └── MockWeatherService.java
│ │ ├── mistralai
│ │ │ ├── MistralAiAutoConfigurationIT.java
│ │ │ ├── MistralAiPropertiesTests.java
│ │ │ └── tool
│ │ ├── moonshot
│ │ │ ├── MoonshotAutoConfigurationIT.java
│ │ │ ├── MoonshotPropertiesTests.java
│ │ │ └── tool
│ │ ├── oci
│ │ │ └── genai
│ │ ├── ollama
│ │ │ ├── BaseOllamaIT.java
│ │ │ ├── OllamaChatAutoConfigurationIT.java
│ │ │ ├── OllamaChatAutoConfigurationTests.java
│ │ │ ├── OllamaEmbeddingAutoConfigurationIT.java
│ │ │ ├── OllamaEmbeddingAutoConfigurationTests.java
│ │ │ ├── OllamaImage.java
│ │ │ └── tool
│ │ ├── openai
│ │ │ ├── OpenAiAutoConfigurationIT.java
│ │ │ ├── OpenAiPropertiesTests.java
│ │ │ ├── OpenAiResponseFormatPropertiesTests.java
│ │ │ └── tool
│ │ ├── postgresml
│ │ │ ├── PostgresMlAutoConfigurationIT.java
│ │ │ └── PostgresMlEmbeddingPropertiesTests.java
│ │ ├── qianfan
│ │ │ ├── QianFanAutoConfigurationIT.java
│ │ │ └── QianFanPropertiesTests.java
│ │ ├── retry
│ │ │ ├── SpringAiRetryAutoConfigurationIT.java
│ │ │ └── SpringAiRetryPropertiesTests.java
│ │ ├── stabilityai
│ │ │ ├── StabilityAiAutoConfigurationIT.java
│ │ │ └── StabilityAiImagePropertiesTests.java
│ │ ├── transformers
│ │ │ └── TransformersEmbeddingModelAutoConfigurationIT.java
│ │ ├── vectorstore
│ │ │ ├── azure
│ │ │ ├── cassandra
│ │ │ ├── chroma
│ │ │ ├── cosmosdb
│ │ │ ├── elasticsearch
│ │ │ ├── gemfire
│ │ │ ├── hanadb
│ │ │ ├── mariadb
│ │ │ ├── milvus
│ │ │ ├── mongo
│ │ │ ├── neo4j
│ │ │ ├── observation
│ │ │ ├── opensearch
│ │ │ ├── oracle
│ │ │ ├── pgvector
│ │ │ ├── pinecone
│ │ │ ├── qdrant
│ │ │ ├── redis
│ │ │ ├── typesense
│ │ │ └── weaviate
│ │ ├── vertexai
│ │ │ ├── embedding
│ │ │ └── gemini
│ │ ├── watsonxai
│ │ │ └── WatsonxAiAutoConfigurationTests.java
│ │ └── zhipuai
│ │ ├── ZhiPuAiAutoConfigurationIT.java
│ │ ├── ZhiPuAiPropertiesTests.java
│ │ └── tool
│ ├── kotlin
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── autoconfigure
│ │ └── ollama
│ │ └── tool
│ └── resources
│ ├── application-test.properties
│ ├── oracle
│ │ └── initialize.sql
│ ├── speech
│ │ └── jfk.flac
│ └── spring_framework.png
└── target├── classes│ └── META-INF│ ├── additional-spring-configuration-metadata.json│ └── spring│ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports├── generated-sources│ └── annotations├── generated-test-sources│ └── test-annotations└── test-classes├── application-test.properties├── oracle│ └── initialize.sql├── speech│ └── jfk.flac└── spring_framework.png
改变前的spring-ai-spring-boot-autoconfigure把所有的耦合在一个模块了
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.ai</groupId><artifactId>spring-ai</artifactId><version>1.0.0-M6</version></parent><artifactId>spring-ai-spring-boot-autoconfigure</artifactId><packaging>jar</packaging><name>Spring AI Auto Configuration</name><description>Spring AI Auto Configuration</description><url>https://github.com/spring-projects/spring-ai</url><scm><url>https://github.com/spring-projects/spring-ai</url><connection>git://github.com/spring-projects/spring-ai.git</connection><developerConnection>git@github.com:spring-projects/spring-ai.git</developerConnection></scm><dependencies><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>${protobuf-java.version}</version><optional>true</optional></dependency><!-- production dependencies --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-otel</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>io.modelcontextprotocol.sdk</groupId><artifactId>mcp-spring-webflux</artifactId><version>${mcp.sdk.version}</version><optional>true</optional></dependency><dependency><groupId>io.modelcontextprotocol.sdk</groupId><artifactId>mcp-spring-webmvc</artifactId><version>${mcp.sdk.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-postgresml</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-azure-openai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-oci-genai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-huggingface</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Transformers Embedding Model --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-transformers</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Pinecone Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-pinecone-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Because of Pinecone compatability issues downgradenetty-codec-http2 from 4.1.101.Final to 4.1.100.Final --><dependency><groupId>io.netty</groupId><artifactId>netty-codec-http2</artifactId><version>4.1.100.Final</version><optional>true</optional></dependency><!-- Milvus Vector Store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-milvus-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Oracle AI Vector Search Store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-oracle-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- TEMP: Workaround until Spring Boot updates its Oracle version --><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc11</artifactId><optional>true</optional></dependency><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ucp</artifactId><optional>true</optional></dependency><dependency><groupId>com.oracle.database.ha</groupId><artifactId>simplefan</artifactId><optional>true</optional></dependency><!-- PG Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-pgvector-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- SAP Hana Cloud Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-hanadb-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>com.pgvector</groupId><artifactId>pgvector</artifactId><version>${pgvector.version}</version><optional>true</optional></dependency><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><optional>true</optional></dependency><!-- MariaDB Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mariadb-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.mariadb.jdbc</groupId><artifactId>mariadb-java-client</artifactId><version>${mariadb.version}</version><optional>true</optional></dependency><!-- Chroma Vector Store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-chroma-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Azure Vector Store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-azure-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Apache Cassandra Vector Store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-cassandra-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Weaviate Vector Store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-weaviate-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Redis Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-redis-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><optional>true</optional></dependency><!-- Override Jedis version --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.0</version><optional>true</optional></dependency><!-- Vertex AI Embedding --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-vertex-ai-embedding</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Vertex AI Gemini --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-vertex-ai-gemini</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Stability AI LLM --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-stability-ai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- WatsonX AI --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-watsonx-ai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Bedrock --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bedrock</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Bedrock Converse --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bedrock-converse</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Mistral AI LLM --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mistral-ai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!-- Neo4j Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-neo4j-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Qdrant Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-qdrant-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mongodb-atlas-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-anthropic</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Elasticsearch Vector Store--><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-elasticsearch-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-gemfire-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-minimax</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-zhipuai</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Moonshot AI --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-moonshot</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-qianfan</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Typesense vector store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-typesense-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- OpenSearch vector store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-opensearch-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><dependency><groupId>software.amazon.awssdk</groupId><artifactId>apache-client</artifactId><version>${awssdk.version}</version><optional>true</optional></dependency><!-- Azure Cosmos DB vector store --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-azure-cosmos-db-store</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- test dependencies --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-test</artifactId><version>${project.parent.version}</version><scope>test</scope></dependency><dependency><groupId>com.oracle.oci.sdk</groupId><artifactId>oci-java-sdk-common</artifactId><version>${oci-sdk-version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-testcontainers</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>testcontainers</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>ollama</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>postgresql</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>oracle-free</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>mariadb</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>cassandra</artifactId><scope>test</scope></dependency><dependency><groupId>com.redis</groupId><artifactId>testcontainers-redis</artifactId><version>2.2.0</version><scope>test</scope></dependency><dependency><groupId>org.awaitility</groupId><artifactId>awaitility</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>neo4j</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>chromadb</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>localstack</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>milvus</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>mongodb</artifactId><version>1.20.2</version><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>qdrant</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>elasticsearch</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>typesense</artifactId><version>1.20.4</version><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>weaviate</artifactId><scope>test</scope></dependency><dependency><groupId>org.opensearch</groupId><artifactId>opensearch-testcontainers</artifactId><version>2.0.1</version><scope>test</scope></dependency><dependency><groupId>org.skyscreamer</groupId><artifactId>jsonassert</artifactId><version>1.5.0</version><scope>test</scope></dependency><dependency><groupId>dev.gemfire</groupId><artifactId>gemfire-testcontainers</artifactId><version>2.3.0</version><scope>test</scope></dependency><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-observation-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-kotlin</artifactId><scope>test</scope></dependency></dependencies></project>
其pom.xml文件通过设置optional为true来解决编译问题
spring-ai-starter-ollama/pom.xml
spring-ai-spring-boot-starters/spring-ai-starter-ollama/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.ai</groupId><artifactId>spring-ai</artifactId><version>1.0.0-M6</version><relativePath>../../pom.xml</relativePath></parent><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><packaging>jar</packaging><name>Spring AI Starter - Ollama</name><description>Spring AI Ollama Auto Configuration</description><url>https://github.com/spring-projects/spring-ai</url><scm><url>https://github.com/spring-projects/spring-ai</url><connection>git://github.com/spring-projects/spring-ai.git</connection><developerConnection>git@github.com:spring-projects/spring-ai.git</developerConnection></scm><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-spring-boot-autoconfigure</artifactId><version>${project.parent.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama</artifactId><version>${project.parent.version}</version></dependency></dependencies></project>
spring-ai-starter-ollama的pom.xml则引入了spring-ai-ollama和spring-ai-spring-boot-autoconfigure依赖
改动后的版本
(base) ➜ auto-configurations git:(main) tree -L 3
.
├── common
│ └── spring-ai-autoconfigure-retry
│ ├── pom.xml
│ └── src
├── mcp
│ ├── spring-ai-autoconfigure-mcp-client
│ │ ├── pom.xml
│ │ └── src
│ └── spring-ai-autoconfigure-mcp-server
│ ├── pom.xml
│ └── src
├── models
│ ├── chat
│ │ ├── client
│ │ ├── memory
│ │ └── observation
│ ├── embedding
│ │ └── observation
│ ├── image
│ │ └── observation
│ ├── spring-ai-autoconfigure-model-anthropic
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-azure-openai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-bedrock-ai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-huggingface
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-minimax
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-mistral-ai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-oci-genai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-ollama
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-openai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-postgresml-embedding
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-stability-ai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-transformers
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-vertex-ai
│ │ ├── pom.xml
│ │ └── src
│ ├── spring-ai-autoconfigure-model-zhipuai
│ │ ├── pom.xml
│ │ └── src
│ └── tool
│ └── spring-ai-autoconfigure-model-tool
└── vector-stores├── spring-ai-autoconfigure-vector-store-azure│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-azure-cosmos-db│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-cassandra│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-chroma│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-couchbase│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-elasticsearch│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-gemfire│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-hanadb│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-mariadb│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-milvus│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-mongodb-atlas│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-neo4j│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-observation│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-opensearch│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-oracle│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-pgvector│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-pinecone│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-qdrant│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-redis│ ├── pom.xml│ └── src├── spring-ai-autoconfigure-vector-store-typesense│ ├── pom.xml│ └── src└── spring-ai-autoconfigure-vector-store-weaviate├── pom.xml└── src
拆分后,原本一个spring-ai-spring-boot-autoconfigure模块拆分出了N个模块,每个模块只关注自己的依赖,好处是避免模块出现依赖冲突
spring-ai-autoconfigure-model-ollama/pom.xml
auto-configurations/models/spring-ai-autoconfigure-model-ollama/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://maven.apache.org/POM/4.0.0"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.ai</groupId><artifactId>spring-ai-parent</artifactId><version>1.0.0-SNAPSHOT</version><relativePath>../../../pom.xml</relativePath></parent><artifactId>spring-ai-autoconfigure-model-ollama</artifactId><packaging>jar</packaging><name>Spring AI Ollama Auto Configuration</name><description>Spring AI Ollama Auto Configuration</description><url>https://github.com/spring-projects/spring-ai</url><scm><url>https://github.com/spring-projects/spring-ai</url><connection>git://github.com/spring-projects/spring-ai.git</connection><developerConnection>git@github.com:spring-projects/spring-ai.git</developerConnection></scm><dependencies><!-- Spring AI dependencies --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama</artifactId><version>${project.parent.version}</version><optional>true</optional></dependency><!-- Spring AI auto configurations --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-tool</artifactId><version>${project.parent.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-chat-observation</artifactId><version>${project.parent.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-embedding-observation</artifactId><version>${project.parent.version}</version></dependency><!-- Boot dependencies --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure-processor</artifactId><optional>true</optional></dependency><!-- Test dependencies --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-test</artifactId><version>${project.parent.version}</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mockito</groupId><artifactId>mockito-core</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope></dependency><dependency><groupId>org.testcontainers</groupId><artifactId>ollama</artifactId><scope>test</scope></dependency><dependency><groupId>com.fasterxml.jackson.module</groupId><artifactId>jackson-module-kotlin</artifactId><scope>test</scope></dependency></dependencies></project>
spring-ai-autoconfigure-model-ollama的pom.xml除了Spring AI auto configurations、Boot dependencies的依赖外,只引入了spring-ai-ollama的依赖
spring-ai-starter-model-ollama/pom.xml
spring-ai-spring-boot-starters/spring-ai-starter-model-ollama/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.ai</groupId><artifactId>spring-ai-parent</artifactId><version>1.0.0-SNAPSHOT</version><relativePath>../../pom.xml</relativePath></parent><artifactId>spring-ai-starter-model-ollama</artifactId><packaging>jar</packaging><name>Spring AI Starter - Ollama</name><description>Spring AI Ollama Spring Boot Starter</description><url>https://github.com/spring-projects/spring-ai</url><scm><url>https://github.com/spring-projects/spring-ai</url><connection>git://github.com/spring-projects/spring-ai.git</connection><developerConnection>git@github.com:spring-projects/spring-ai.git</developerConnection></scm><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-ollama</artifactId><version>${project.parent.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama</artifactId><version>${project.parent.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-chat-client</artifactId><version>${project.parent.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-autoconfigure-model-chat-memory</artifactId><version>${project.parent.version}</version></dependency></dependencies></project>
spring-ai-starter-model-ollama的pom.xml则引入spring-ai-ollama和spring-ai-autoconfigure-model-ollama
小结
Spring AI的1.0.0-M7版本及以后重构了autoconfigure模块,具体是将spring-ai-spring-boot-autoconfigure模块拆分出了N个模块,每个模块只关注自己的依赖,好处是避免出现依赖冲突。
doc
- 聊聊Spring AI 1.0.0-SNAPSHOT的变更
相关文章:
聊聊Spring AI autoconfigure模块的拆分
序 本文主要研究一下Spring AI autoconfigure模块的拆分 v1.0.0-M6版本 (base) ➜ spring-ai-spring-boot-autoconfigure git:(v1.0.0-M6) tree -L 9 . ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ └…...
LVGL源码学习之渲染、更新过程(3)---绘制和刷写
LVGL版本:8.1 往期回顾: LVGL源码学习之渲染、更新过程(1)---标记和激活 LVGL源码学习之渲染、更新过程(2)---无效区域的处理 前文提到,在处理完无效区域后,会得到一个个需要重新绘制的对象,这些对象将在DRAW事件中…...
CTF-DAY11
[NSSRound#16 Basic]了解过PHP特性吗 题目: <?php error_reporting(0); highlight_file(__FILE__); include("rce.php"); $checker_1 FALSE; $checker_2 FALSE; $checker_3 FALSE; $checker_4 FALSE; $num $_GET[num]; if (preg_match("/…...
手动修改uart16550的FIFO深度?
参考:修改AXI UART D16550 FIFO深度的过程记录 - lmore - 博客园...
Unity按钮事件冒泡
今天unity写程序时,我做了一个透明按钮,没图片,只绑了点击事件,把子对象文字组件也删了,空留一个透明按钮,此时运行时点击按钮是没有反应的,网上的教程说必须指定target graphic(目标…...
基于Llama3的开发应用(一):Llama模型的简单部署
Llama模型的简单部署 0 前言1 环境准备1.1 硬件环境1.2 软件环境 2 Meta-Llama-3-8B-Instruct 模型简介2.1 Instruct含义2.2 模型下载 3 简单调用4 FastAPI 部署4.1 通过FastAPI简单部署4.2 测试 5 使用 streamlit 构建简易聊天界面6 总结 0 前言 本系列文章是基于Meta-Llama-…...
人工智能 机器学习期末考试题
自测试卷2 一、选择题 1.下面哪个属性不是NumPy中数组的属性( )。 A.ndim B.size C.shape D.add 2.一个简单的Series是由( )的数据组成的。 A.两…...
修改docker为国内源
一、编辑docker配置文件 vi /etc/docker/daemon.json二、配置国内源和修改docker数据目录 {"registry-mirrors":["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://u…...
C++八股 —— vector底层
vector底层为动态数组 类构成 class vector : protected _Vector_base_Vector_base: _M_start:容器元素开始的位置_M_finish:容器元素结束的位置_M_end_of_storage:动态内存最后一个元素的下一个位置 构造函数 无参构造 根据性能优先规则&a…...
postgresql 参数wal_level
wal_level决定多少信息写入到 WAL 中。默认值是replica,它会写入足够的数据以支持WAL归档和复制,包括在后备服务器上运行只读查询。minimal会去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录。最后,logical会增加支持逻辑解码所…...
Lightweight App Alternatives
The tech industry’s business model thrives on constant churn: new features, fancier designs, and heavier apps — not because they’re essential, but because they keep consumers upgrading. Stripping your phone back to basics is an act of tech self-defense.…...
SpringAI--基于MySQL的持久化对话记忆实现
SpringAI–基于MySQL的持久化对话记忆实现 项目源码 对话记忆官方介绍 SpringAI目前提供了一些将对话保存到不同数据源中的实现,比如: InMemoryChatMemory 基于内存存储CassandraChatMemory 在Cassandra中带有过期时间的持久化存储。Neo4jChatMemory 在Neo4j中没…...
【教学类-34-12】20250509(通义万相)4*3蝴蝶拼图(圆形、三角、正方、半圆的凹凸小块+数字提示+参考图灰色)
背景介绍 制作了四款异形角拼图,初步实现效果 【教学类-34-10】20250503(通义万相)4*3蝴蝶拼图(圆形、三角、正方、半圆的凹凸小块+参考图灰色)-CSDN博客文章浏览阅读1.4k次,点赞46次,收藏15次。【教学类-34-10】20250503(通义万相)4*3蝴蝶拼图(圆形、三角、正方、…...
C++编程语言:标准库:标准库概观(Bjarne Stroustrup)
第30章 标准库概观(Standard-Library Overview) 目录 30.1 引言 30.1.1 标准库设施 30.1.2 设计约束 30.1.3 描述风格 30.2 头文件 30.3 语言支持 30.3.1 对initializer_list的支持 30.3.2 对范围for的支持 30.4 异常处理 30.4.1 异常 30.4.1…...
Springboot+Vue+Mybatis-plus-Maven-Mysql项目部署
目录 VScode 1插件 2快捷键修改 3图标主题设置 4常用设置1 5设置自动换行 6颜色主题 7创建站点 8新建一个html文件 window系统设置 ps 1取色 2测量 3修改单位为像素 4放大图片 5拖动放大之后的图片 6文字大小测量 7测量文字的行高 8矩形选框切图1 9矩形选框…...
【C/C++】C++中noexcept的妙用与性能提升
文章目录 C中noexcept的妙用与性能提升1 什么情况下会抛出异常2 标记noexcept作用3 何时使用noexcept4 无异常行为标记场景5 一句话总结 C中noexcept的妙用与性能提升 在C中,noexcept修饰符用于指示函数不会抛出异常 1 什么情况下会抛出异常 在 C 中,异…...
增强学习(Reinforcement Learning)简介
增强学习(Reinforcement Learning)简介 增强学习是机器学习的一种范式,其核心目标是让智能体(Agent)通过与环境的交互,基于试错机制和延迟奖励反馈,学习如何选择最优动作以最大化长期累积回报。…...
如何优化系统启动时间--基于米尔瑞萨MYD-YG2LX开发板
1.概述 MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A551.2GHzCortex-M33200MHz处理器,其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600 / DDR3L-1333内…...
.Net HttpClient 概述
HttpClient 概述 作用 HttpClient是一个用于发送HTTP请求和接收HTTP响应的类。它提供了一种现代化、灵活和强大的方式来与Web服务进行通信。HttpClient类位于System.Net.Http命名空间下,可以通过NuGet包管理器进行安装。 整体理解 HttpClient是应用程序进程中&am…...
明远智睿SSD2351开发板:仪器仪表与智慧农业的创新利器
在仪器仪表和智慧农业领域,对设备的精度、稳定性和智能化程度有着较高的要求。明远智睿的SSD2351开发板以其独特的优势,成为这两个领域的创新利器。 在仪器仪表方面,SSD2351开发板的四核1.4GHz处理器能够快速处理仪器仪表采集到的各种数据&am…...
VBA -- 学习Day4
数组 创建数组: Dim 数组名(数组元素上下角标)[As 元素类型] eg. Dim MyArray (1 To 3) As Integer 注意:1.如果不指定元素类型,则是Variant类型 向数组赋值: eg. MyArray(1) 100 MyArray(2) 200…...
Nacos源码—7.Nacos升级gRPC分析四
大纲 5.服务变动时如何通知订阅的客户端 6.微服务实例信息如何同步集群节点 6.微服务实例信息如何同步集群节点 (1)服务端处理服务注册时会发布一个ClientChangedEvent事件 (2)ClientChangedEvent事件的处理源码 (3)集群节点处理数据同步请求的源码 (1)服务端处理服务注册…...
Linux 学习笔记2
Linux 学习笔记2 一、定时任务调度操作流程注意事项 二、磁盘分区与管理添加新硬盘流程磁盘管理命令 三、进程管理进程操作命令服务管理(Ubuntu) 四、注意事项 一、定时任务调度 操作流程 创建脚本 vim /path/to/script.sh # 编写脚本内容设置可执行权…...
一、每日Github软件分享----QuickGo外链直达工具
QuickGo 是一款专注于提升网页浏览效率的浏览器扩展工具,其核心功能是自动绕过网站的安全跳转限制,让用户点击外链时无需手动确认,直接跳转至目标页面。以下是详细功能介绍与分析: 一、核心功能与亮点 极速跳转 通过优化浏览器 AP…...
【软件测试】软件缺陷(Bug)的详细描述
目录 一、软件缺陷(Bug) 1.1 缺陷的判定标准 1.2 缺陷的生命周期 1.3 软件缺陷的描述 1.3.1 提交缺陷的要素 1.3.2 Bug 的级别 1.4 如何发现更多的 Bug? 1.5 缺陷的有效管理 1.5.1 缺陷的编写 1.5.2 缺陷管理工具 1.5.2.1 缺陷管理 1.5.2.2 用例管理 一、软件缺陷…...
C++ stl中的list的相关函数用法
文章目录 list的介绍list的使用定义方式 插入和删除迭代器的使用获取元素容器中元素个数和容量的控制其它操作函数 list的使用,首先要包含头文件 #include <list>list的介绍 1.list是一种可以在常数范围内在链表中的任意位置进行插入和删除的序列式容器&…...
Cmd命令大全,从入门到放弃
1、文件和目录操作 dir /p:分页显示目录内容。 dir /w:以单行显示目录内容。 dir /s:显示指定目录及子目录下的所有文件。 dir /b:仅显示文件和目录名称。 dir /a:显示具有特定属性的文件和目录。 cd /d:改变当前驱动器。 pushd:将当前目录压入堆栈,并切换到指定…...
数据同步选择推Push还是拉Pull
数据同步选择“推”(Push)还是“拉”(Pull”,要根据实际场景、系统架构和对实时性、资源消耗、安全性的需求来决定。下面是两种方式的对比分析,帮你更好地判断: 文章目录 推模式(Pushÿ…...
Kafka集群加入新Broker节点会发生什么
Kafka集群加入新Broker节点会发生什么 当向现有的Kafka集群添加新的Broker节点时,会触发一系列自动和手动的过程。以下是详细的流程和影响: 自动发生的流程 集群发现与注册 新Broker启动时会向ZooKeeper注册自己加入集群的/brokers/ids路径下其他Broke…...
【LeetCode Solutions】LeetCode 176 ~ 180 题解
CONTENTS LeetCode 176. 第二高的薪水(SQL 中等)LeetCode 177. 第 N 高的薪水(SQL 中等)LeetCode 178. 分数排名(SQL 中等)LeetCode 179. 最大数(中等)LeetCode 180. 连续出现的数字…...
Sourcetree安装使用的详细教程
Sourcetree 是由 Atlassian 推出的 免费 Git 图形化客户端,支持 Git 和 Mercurial 仓库管理,适用于 Windows 和 macOS。 一、安装教程 1. 下载 官网地址:Sourcetree | Free Git GUI for Mac and Windows 选择你的平台下载安装包࿰…...
对比学习入门
Yann Lecun在NIPS 2016上提出了著名的“蛋糕比喻”:如果智能是一个蛋糕,蛋糕上的大部分是无监督学习(unsupervised learning),蛋糕上的糖霜是监督学习(supervised learning),而蛋糕上…...
Starrocks 的 ShortCircuit短路径
背景 本文基于 Starrocks 3.3.5 本文主要来探索一下Starrocks在FE端怎么实现 短路径,从而加速点查查询速度。 在用户层级需要设置 enable_short_circuit 为true 分析 数据流: 直接到StatementPlanner.createQueryPlan方法: ... OptExpres…...
Windows远程访问Ubuntu的方法
要在Windows上远程访问Ubuntu系统,以下是几种常见的方法: SSH (Secure Shell):通过Windows命令行远程连接到Ubuntu。 在Ubuntu上,确保安装并启用了SSH服务(通常可以通过sudo apt update && sudo apt install openssh-serv…...
23种设计模式-行为型模式之模板方法模式(Java版本)
Java 模板方法模式(Template Method Pattern)详解 🧠 什么是模板方法模式? 模板方法模式是一种行为型设计模式,定义了一个操作中的算法骨架,将一些步骤的实现延迟到子类中。通过模板方法模式,…...
(undone) MIT6.S081 Lec17 VM for APP 学习笔记
url: https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/lec17-virtual-memory-for-applications-frans/17.1-ying-yong-cheng-xu-shi-yong-xu-ni-nei-cun-suo-xu-yao-de-te-xing 17.1 应用程序使用虚拟内存所需要的特性 今天的话题是用户应用程序使用的虚拟内存…...
值拷贝、浅拷贝和深拷贝
✅ 一、基本概念 1. 值拷贝(Value Copy) 含义:将一个变量的值完整复制到另一个变量中。 对象级别表现:调用的是拷贝构造函数(copy constructor)。 特点:对基本类型或不含动态资源的对象&…...
JWT原理及工作流程详解
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在各方之间安全传输信息。其核心原理是通过结构化、签名或加密的JSON对象实现无状态身份验证和授权。以下是JWT的工作原理和关键组成部分: 1. JWT结构 J…...
广西某建筑用花岗岩矿自动化监测
1. 项目简介 某矿业有限公司成立于2021年,是由某建筑材料有限公司与个人共同出资成立,矿区面积0.4069平方公里,可开采筑用花岗岩、建筑用砂岩。建筑用花岗岩、建筑用砂岩可利用资源量分别为6338.69万吨、303.39万吨,设计生产规模…...
100个思维模型系列更新完毕!
giszz的粉丝们,到今天为止,思维模型专栏已经更新了100期,正式告一段落了。 以下是为你列出的100个思维模型名字(部分思维模型可能存在多种表述方式,但核心概念一致,这里尽量涵盖不同领域常见的思维模型&am…...
Bitcoin跨链协议Clementine的技术解析:重构DeFi生态的信任边界
2025年5月2日,比特币Rollup项目Citrea在测试网正式推出跨链协议Clementine,其基于BitVM2编程语言构建的信任最小化桥接技术,被视为解决比特币与DeFi生态融合难题的关键突破。本文从技术背景、核心机制、安全模型、应用场景四大维度࿰…...
北斗导航 | RTKLib中重难点技术,公式,代码
Rtklib 一、抗差自适应卡尔曼滤波1. **核心难点**2. **公式与代码实现**二、模糊度固定与LAMBDA算法1. **核心难点**2. **LAMBDA算法实现**3. **部分模糊度固定技术**三、伪距单点定位与误差修正1. **多系统多频点修正**2. **接收机钟差与系统间偏差**四、动态模型与周跳处理1.…...
C++学习之类和对象_1
1. 面向过程与面向对象 C语言是面向过程的,注重过程,通过调用函数解决问题。 比如做番茄炒蛋:买番茄和鸡蛋->洗番茄和打鸡蛋->先炒蛋->把蛋放碟子上->炒番茄->再把蛋倒回锅里->加调料->出锅 而C是面向对象的ÿ…...
Oracle OCP认证考试考点详解083系列14
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 66. 第66题: 题目 解析及答案: 当一个非常大的数据文件被划分为四个部分进行 RMAN 多区段备份时,以下…...
华为欧拉(EulerOS)系统全栈软件部署指南:从 Redis 到 MySQL 实战详解
前言 在国产化操作系统蓬勃发展的背景下,华为欧拉(EulerOS)凭借其稳定性与安全性,成为企业级服务器部署的重要选择。本文基于官方技术文档与最佳实践,详细梳理 Redis 集群、RabbitMQ、JDK、Tomcat 及 MySQL 在欧拉系统…...
YOLO使用CableInspect-AD数据集实现输电线路缺陷检测
输电线路缺陷检测是一个关键的任务,旨在确保电力传输系统的可靠性和安全性。今天我们使用CableInspect-AD数据集进行训练完成缺陷检测,下载的数据集格式如下: 我们需要经过以下步骤: COCO转YOLO 首先是将COCO格式的数据转换为YO…...
全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷五及详细答案解析
博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
三个线程 a、b、c 并发运行,b,c 需要 a 线程的数据如何解决
说明: 开发中经常会碰到线程并发,但是后续线程需要等待第一个线程执行完返回结果后,才能再执行后面线程。 如何处理呢,今天就介绍两种方法 1、使用Java自有的API即CountDownLatch,进行实现 思考:CountDown…...
python实现点餐系统
使用python实现点餐系统的增加菜品及价格,删除菜品,查询菜单,点菜以及会员折扣价等功能。 代码: 下面展示一些 内联代码片。 # coding utf-8menu {拍黄瓜: 6, 小炒肉: 28, 西红柿炒蛋: 18, 烤鱼: 30, 红烧肉: 38, 手撕鸡: 45,…...
力扣26——删除有序数组中的重复项
目录 1.题目描述: 2.算法分析: 3.代码展示: 1.题目描述: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对…...