Spring Ecosystem Update: Boot 4.2 and Framework 7.1 Hit RC1, Spring AI 2.1 Adds Bring-Your-Own Embeddings and Reasoning Replay, 2026-11-02
java

Spring Ecosystem Update: Boot 4.2 and Framework 7.1 Hit RC1, Spring AI 2.1 Adds Bring-Your-Own Embeddings and Reasoning Replay, 2026-11-02

4 min read

Spring Boot 4.2, Framework 7.1 and the Whole Portfolio Reach RC1

The week of October 19 brought first release candidates for almost every Spring project, which puts the November release train in its final stretch. Spring Boot 4.2.0-RC1 migrates the default buildpack builder to Ubuntu Resolute (replacing the Noble Java Tiny builder) and speeds up executable uber-JARs by looking up classes and resources in nested JARs directly. Spring Framework 7.1.0-RC1 improves nullability in DataAccessUtils and LinkedCaseInsensitiveMap, adds onRetrySuccess() and onRetryFailure() callbacks to RetryListener that receive a RetryState, and removes previously deprecated APIs.

Several RCs carry changes worth checking before upgrading:

  • Spring Cloud 2026.0.0-RC1 ("Paddington") is based on Boot 4.2.0-RC1, and Spring Cloud Bus is no longer a separate project; it has been merged into Spring Cloud Stream.
  • Spring Security 7.2.0-RC1 normalizes HTTP method casing in StrictServerWebExchangeFirewall, and the opaque-token introspectors now send application/x-www-form-urlencoded.
  • Spring Modulith 2.2.0-RC1 adds ABANDONED and RESUBMITTED publication statuses and now completes event publications via TransactionSynchronization inside the listener's transaction.
  • Spring Batch 6.1.0-RC1 introduces a @JobParameter annotation for injecting job parameters without expression-language strings, plus a type-safe PageableItemReader.
  • Spring Integration 7.2.0-RC1 deprecates the default constructor of SerializingHttpMessageConverter in favor of one that takes an allow-list of patterns.

Spring Data 2026.1.0-RC1, Spring for GraphQL 2.1.0-RC1, Spring Session 4.2.0-RC1, Spring AMQP and Spring for Apache Kafka 4.2.0-RC1, Spring LDAP 4.2.0-RC1 (with breaking changes) and Spring AI 2.1.0-RC1 shipped the same week. RC1 is the right moment to run your test suite against the new versions, since API changes after this point should be limited to fixes.

Read more — InfoQ


Spring AI 2.1 Lets You Bring Your Own Embeddings

Until now, VectorStore.add() always called the store's configured embedding model. Spring AI 2.1 adds VectorStore.upsert(List<EmbeddedDocument>) for writing documents together with precomputed float[] vectors, and similaritySearch(float[], SearchRequest) for searching with a query vector directly. topK, similarity thresholds and metadata filters still apply. EmbeddedDocument rejects empty vectors and non-finite values at construction time.

The Spring team's example is multimodal product search: embed product photos with VertexAiMultimodalEmbeddingModel, store them with a stable ID derived from the SKU and a URL reference to the image in metadata, then embed a text query such as "green velvet armchair" with the same model and search by vector. The same mechanism lets teams reuse vectors produced by batch embedding jobs or migrations instead of paying to re-embed text.

Stores validate vector dimensions before writing when the index dimension is known, and Redis refuses to write if it cannot determine the expected size. Support in 2.1.0-RC1 covers PGvector, Redis, Elasticsearch, Qdrant and OpenSearch; other stores throw UnsupportedOperationException from default methods until implemented. An upsert call is not transactional, so a partial failure should be retried with the same IDs. The post recommends storing the embedding model name and version in metadata so you know which documents need regenerating after a model change.

Read more — Spring Blog


Spring AI 2.1 Message Parts Keep Reasoning Intact Across Turns

Spring AI 2.1 changes the message data model: every message now holds an ordered List<MessagePart> instead of a text string plus separate lists for tool calls and media. MessagePart is a sealed interface with TextPart, ReasoningPart, ToolCallPart, ToolResultPart, MediaPart and UnknownPart records, and provider-issued signatures or encrypted reasoning are carried as an OpaquePayload that is only replayed to the provider that issued it. Existing accessors such as getText() and getToolCalls() become views over the parts, and a new getReasoning() replaces provider-specific reasoning access.

This matters for tool-calling loops with reasoning models. Anthropic rejects requests where thinking blocks were altered, Gemini 3+ function calls fail without their thought signatures, and misordered replays can cause HTTP 400 errors or silently drop earlier reasoning. Spring AI 2.1 now replays reasoning correctly for Anthropic, Google GenAI, OpenAI-compatible servers (vLLM, gpt-oss, Kimi), Ollama, Bedrock Converse, DeepSeek and Mistral. A new OpenAiResponsesChatModel supports OpenAI's Responses API in stateless mode, mapping each response item to a part in order.

Persistence moves to Spring AI Session, which stores conversations as an append-only event log of full message parts; SessionMemoryAdvisor records every tool round, and compaction only cuts at turn boundaries. ChatMemory and its repositories are deprecated and scheduled for removal in 3.0. Histories written before 2.1 contain no reasoning parts, and reasoning signed by one provider is never sent to another when you switch models.

Read more — Spring Blog


Stanislav Lentsov

Written by

Stanislav Lentsov

Software Architect

You May Also Enjoy