Skip to content

Commit caf4968

Browse files
committed
Spring Boot 4 compatibility
Signed-off-by: Paul Bakker <[email protected]>
1 parent 8327c0f commit caf4968

File tree

187 files changed

+791
-575
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+791
-575
lines changed

auto-configurations/common/spring-ai-autoconfigure-retry/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@
6262
<scope>test</scope>
6363
</dependency>
6464

65+
<dependency>
66+
<groupId>org.springframework.boot</groupId>
67+
<artifactId>spring-boot-starter-restclient</artifactId>
68+
<scope>test</scope>
69+
</dependency>
70+
6571
<dependency>
6672
<groupId>org.mockito</groupId>
6773
<artifactId>mockito-core</artifactId>

auto-configurations/common/spring-ai-autoconfigure-retry/src/main/java/org/springframework/ai/retry/autoconfigure/SpringAiRetryAutoConfiguration.java

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
package org.springframework.ai.retry.autoconfigure;
1818

1919
import java.io.IOException;
20+
import java.net.URI;
2021
import java.nio.charset.StandardCharsets;
22+
import java.util.concurrent.atomic.AtomicInteger;
2123

2224
import org.slf4j.Logger;
2325
import org.slf4j.LoggerFactory;
@@ -30,12 +32,13 @@
3032
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3133
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3234
import org.springframework.context.annotation.Bean;
35+
import org.springframework.core.retry.RetryListener;
36+
import org.springframework.core.retry.RetryPolicy;
37+
import org.springframework.core.retry.RetryTemplate;
38+
import org.springframework.core.retry.Retryable;
39+
import org.springframework.http.HttpMethod;
3340
import org.springframework.http.client.ClientHttpResponse;
3441
import org.springframework.lang.NonNull;
35-
import org.springframework.retry.RetryCallback;
36-
import org.springframework.retry.RetryContext;
37-
import org.springframework.retry.RetryListener;
38-
import org.springframework.retry.support.RetryTemplate;
3942
import org.springframework.util.CollectionUtils;
4043
import org.springframework.util.StreamUtils;
4144
import org.springframework.web.client.ResponseErrorHandler;
@@ -58,21 +61,25 @@ public class SpringAiRetryAutoConfiguration {
5861
@Bean
5962
@ConditionalOnMissingBean
6063
public RetryTemplate retryTemplate(SpringAiRetryProperties properties) {
61-
return RetryTemplate.builder()
64+
RetryPolicy retryPolicy = RetryPolicy.builder()
6265
.maxAttempts(properties.getMaxAttempts())
63-
.retryOn(TransientAiException.class)
64-
.exponentialBackoff(properties.getBackoff().getInitialInterval(), properties.getBackoff().getMultiplier(),
65-
properties.getBackoff().getMaxInterval())
66-
.withListener(new RetryListener() {
67-
68-
@Override
69-
public <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback,
70-
Throwable throwable) {
71-
logger.warn("Retry error. Retry count: {}, Exception: {}", context.getRetryCount(),
72-
throwable.getMessage(), throwable);
73-
}
74-
})
66+
.includes(TransientAiException.class)
67+
.delay(properties.getBackoff().getInitialInterval())
68+
.multiplier(properties.getBackoff().getMultiplier())
69+
.maxDelay(properties.getBackoff().getMaxInterval())
7570
.build();
71+
72+
RetryTemplate retryTemplate = new RetryTemplate(retryPolicy);
73+
retryTemplate.setRetryListener(new RetryListener() {
74+
private final AtomicInteger retryCount = new AtomicInteger(0);
75+
76+
@Override
77+
public void onRetryFailure(RetryPolicy policy, Retryable<?> retryable, Throwable throwable) {
78+
int currentRetries = retryCount.incrementAndGet();
79+
logger.warn("Retry error. Retry count:{}", currentRetries, throwable);
80+
}
81+
});
82+
return retryTemplate;
7683
}
7784

7885
@Bean
@@ -87,7 +94,8 @@ public boolean hasError(@NonNull ClientHttpResponse response) throws IOException
8794
}
8895

8996
@Override
90-
public void handleError(@NonNull ClientHttpResponse response) throws IOException {
97+
public void handleError(URI url, HttpMethod method, @NonNull ClientHttpResponse response)
98+
throws IOException {
9199
if (!response.getStatusCode().isError()) {
92100
return;
93101
}

auto-configurations/common/spring-ai-autoconfigure-retry/src/test/java/org/springframework/ai/retry/autoconfigure/SpringAiRetryAutoConfigurationIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import org.junit.jupiter.api.Test;
2020

2121
import org.springframework.boot.autoconfigure.AutoConfigurations;
22-
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
22+
import org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration;
2323
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
24-
import org.springframework.retry.support.RetryTemplate;
24+
import org.springframework.core.retry.RetryTemplate;
2525
import org.springframework.web.client.ResponseErrorHandler;
2626

2727
import static org.assertj.core.api.Assertions.assertThat;

auto-configurations/mcp/spring-ai-autoconfigure-mcp-server-webflux/src/test/java/org/springframework/ai/mcp/server/autoconfigure/McpServerSseWebFluxAutoConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import org.springframework.ai.mcp.server.common.autoconfigure.properties.McpServerProperties;
2424
import org.springframework.boot.autoconfigure.AutoConfigurations;
25-
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
25+
import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration;
2626
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2727
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2828
import org.springframework.context.annotation.Configuration;

auto-configurations/models/chat/memory/repository/spring-ai-autoconfigure-model-chat-memory-repository-jdbc/src/test/java/org/springframework/ai/model/chat/memory/repository/jdbc/autoconfigure/JdbcChatMemoryRepositoryPostgresqlAutoConfigurationIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.springframework.ai.chat.messages.UserMessage;
2929
import org.springframework.ai.model.chat.memory.autoconfigure.ChatMemoryAutoConfiguration;
3030
import org.springframework.boot.autoconfigure.AutoConfigurations;
31-
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
31+
import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
3232
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
3333
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3434

auto-configurations/models/chat/memory/repository/spring-ai-autoconfigure-model-chat-memory-repository-jdbc/src/test/java/org/springframework/ai/model/chat/memory/repository/jdbc/autoconfigure/JdbcChatMemoryRepositorySchemaInitializerPostgresqlTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.testcontainers.utility.DockerImageName;
2626

2727
import org.springframework.boot.autoconfigure.AutoConfigurations;
28-
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
28+
import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
2929
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
3030
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3131

auto-configurations/models/chat/memory/repository/spring-ai-autoconfigure-model-chat-memory-repository-jdbc/src/test/java/org/springframework/ai/model/chat/memory/repository/jdbc/autoconfigure/JdbcChatMemoryRepositorySqlServerAutoConfigurationIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import org.springframework.ai.chat.messages.UserMessage;
3434
import org.springframework.ai.model.chat.memory.autoconfigure.ChatMemoryAutoConfiguration;
3535
import org.springframework.boot.autoconfigure.AutoConfigurations;
36-
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
36+
import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
3737
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
3838
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3939

auto-configurations/models/spring-ai-autoconfigure-model-anthropic/src/main/java/org/springframework/ai/model/anthropic/autoconfigure/AnthropicChatAutoConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@
3333
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3434
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3535
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
36-
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
37-
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
36+
import org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration;
37+
import org.springframework.boot.webclient.autoconfigure.WebClientAutoConfiguration;
3838
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3939
import org.springframework.context.annotation.Bean;
40+
import org.springframework.core.retry.RetryTemplate;
4041
import org.springframework.context.annotation.Import;
41-
import org.springframework.retry.support.RetryTemplate;
4242
import org.springframework.web.client.ResponseErrorHandler;
4343
import org.springframework.web.client.RestClient;
4444
import org.springframework.web.reactive.function.client.WebClient;

auto-configurations/models/spring-ai-autoconfigure-model-anthropic/src/test/java/org/springframework/ai/model/anthropic/autoconfigure/AnthropicPropertiesTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.springframework.ai.anthropic.api.AnthropicApi.ToolChoiceTool;
2323
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2424
import org.springframework.boot.autoconfigure.AutoConfigurations;
25-
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
25+
import org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration;
2626
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2727

2828
import static org.assertj.core.api.Assertions.assertThat;

auto-configurations/models/spring-ai-autoconfigure-model-anthropic/src/test/java/org/springframework/ai/model/anthropic/autoconfigure/BaseAnthropicIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
2323
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2424
import org.springframework.boot.autoconfigure.AutoConfigurations;
25-
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
26-
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
25+
import org.springframework.boot.restclient.autoconfigure.RestClientAutoConfiguration;
26+
import org.springframework.boot.webclient.autoconfigure.WebClientAutoConfiguration;
2727

2828
public abstract class BaseAnthropicIT {
2929

0 commit comments

Comments
 (0)