diff --git a/.kiro/agents/rules/spring-boot-4.md b/.kiro/agents/rules/spring-boot-4.md
index 34945829..1e2ea088 100644
--- a/.kiro/agents/rules/spring-boot-4.md
+++ b/.kiro/agents/rules/spring-boot-4.md
@@ -4,7 +4,7 @@
| Dependency | Version |
|-----------|---------|
-| Spring Boot | 4.0.7 |
+| Spring Boot | 4.1.0 |
| Spring Data Parent | 4.1.0 |
| Lettuce | 7.5.2.RELEASE |
| Jedis | 7.4.1 |
diff --git a/.kiro/agents/upstream-sync-orchestrator.md b/.kiro/agents/upstream-sync-orchestrator.md
index ae5f34f1..9e03c9d7 100644
--- a/.kiro/agents/upstream-sync-orchestrator.md
+++ b/.kiro/agents/upstream-sync-orchestrator.md
@@ -16,7 +16,7 @@ You are the orchestrator for syncing spring-data-valkey with upstream Spring Dat
You will be given:
- **Source version**: The current upstream version (default: `3.5.1`)
-- **Target version**: The upstream version to upgrade to (default: `4.1.0` for spring-data-redis, `4.0.7` for spring-boot)
+- **Target version**: The upstream version to upgrade to (default: `4.1.0` for spring-data-redis, `4.1.0` for spring-boot)
- **Upstream repo paths**:
- spring-data-redis: `/workspace/amazon/spring-data-redis`
- spring-boot: `/workspace/amazon/spring-boot`
diff --git a/AGENTS.md b/AGENTS.md
index ebecdbf0..3edcf930 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -8,7 +8,7 @@ Spring Data Valkey is a Spring Data module providing first-class Valkey/Redis in
**Primary Language:** Java 17+
**Build System:** Maven (use `./mvnw` wrapper)
-**Framework:** Spring Data 4.1.x, Spring Boot 4.0.x
+**Framework:** Spring Data 4.1.x, Spring Boot 4.1.x
**Origin:** Synced with Spring Data Redis 4.1.0 — class and package renames follow the pattern `*Redis*` → `*Valkey*`, `*redis*` → `*valkey*` (see [MIGRATION.md](./MIGRATION.md) for full mapping, [DEVELOPER.md](./DEVELOPER.md) for source alignment and detailed build/release info)
**Key Components:**
diff --git a/DEVELOPER.md b/DEVELOPER.md
index 32b50e8d..e1559df3 100644
--- a/DEVELOPER.md
+++ b/DEVELOPER.md
@@ -190,7 +190,7 @@ This repository is forked from Spring Data Redis and related projects. This sect
|--------------|------------------------|------------|-------|
| `./` | [spring-data-build](https://github.com/spring-projects/spring-data-build) | `4.1.0` | Parent for Spring Data modules |
| `spring-data-valkey/` | [spring-data-redis](https://github.com/spring-projects/spring-data-redis) | `4.1.0` | Core Spring Data Redis functionality |
-| `spring-boot-starter-data-valkey/` | [spring-boot](https://github.com/spring-projects/spring-boot) | `4.0.7` | Spring Boot auto-configuration for Redis |
+| `spring-boot-starter-data-valkey/` | [spring-boot](https://github.com/spring-projects/spring-boot) | `4.1.0` | Spring Boot auto-configuration for Redis |
| `docs/` | [spring-data-redis](https://github.com/spring-projects/spring-data-redis) | `4.1.0` | Documentation |
| `examples/` | [spring-data-examples](https://github.com/spring-projects/spring-data-examples) | `main` | Redis examples |
diff --git a/pom.xml b/pom.xml
index 15508f8a..dfeb6cd1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
true
- 4.0.7
+ 4.1.0
4.1.0
diff --git a/spring-boot-starter-data-valkey/README.md b/spring-boot-starter-data-valkey/README.md
index e96df2a0..8b421517 100644
--- a/spring-boot-starter-data-valkey/README.md
+++ b/spring-boot-starter-data-valkey/README.md
@@ -4,7 +4,7 @@ A Spring Boot starter that provides auto-configuration for Valkey, enabling seam
This starter simplifies the setup and configuration of Valkey in Spring Boot applications by providing auto-configuration for Valkey connections and Spring Data integration.
-The project is a fork of Spring Boot Starter Data Redis 4.0.7 (part of the [Spring Boot](https://github.com/spring-projects/spring-boot) repository).
+The project is a fork of Spring Boot Starter Data Redis 4.1.0 (part of the [Spring Boot](https://github.com/spring-projects/spring-boot) repository).
## Features
diff --git a/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/JedisConnectionConfiguration.java b/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/JedisConnectionConfiguration.java
index 06bbecaf..a9030190 100644
--- a/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/JedisConnectionConfiguration.java
+++ b/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/JedisConnectionConfiguration.java
@@ -19,8 +19,8 @@
import javax.net.ssl.SSLParameters;
import org.apache.commons.pool2.impl.GenericObjectPool;
+import redis.clients.jedis.ConnectionPoolConfig;
import redis.clients.jedis.Jedis;
-import redis.clients.jedis.JedisPoolConfig;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -151,11 +151,11 @@ private void applySslIfNeeded(JedisClientConfigurationBuilder builder) {
private void applyPooling(ValkeyProperties.Pool pool,
JedisClientConfiguration.JedisClientConfigurationBuilder builder) {
- builder.usePooling().poolConfig(jedisPoolConfig(pool));
+ builder.usePooling().poolConfig(poolConfig(pool));
}
- private JedisPoolConfig jedisPoolConfig(ValkeyProperties.Pool pool) {
- JedisPoolConfig config = new JedisPoolConfig();
+ private ConnectionPoolConfig poolConfig(ValkeyProperties.Pool pool) {
+ ConnectionPoolConfig config = new ConnectionPoolConfig();
config.setMaxTotal(pool.getMaxActive());
config.setMaxIdle(pool.getMaxIdle());
config.setMinIdle(pool.getMinIdle());
diff --git a/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/LettuceConnectionConfiguration.java b/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/LettuceConnectionConfiguration.java
index c2e9ff1c..965d96fa 100644
--- a/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/LettuceConnectionConfiguration.java
+++ b/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/LettuceConnectionConfiguration.java
@@ -240,9 +240,6 @@ private ClientOptions.Builder initializeClientOptionsBuilder() {
if (refreshProperties.getPeriod() != null) {
refreshBuilder.enablePeriodicRefresh(refreshProperties.getPeriod());
}
- if (refreshProperties.isAdaptive()) {
- refreshBuilder.enableAllAdaptiveRefreshTriggers();
- }
return builder.topologyRefreshOptions(refreshBuilder.build());
}
return ClientOptions.builder();
diff --git a/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyProperties.java b/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyProperties.java
index f0a5a890..5810ad9d 100644
--- a/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyProperties.java
+++ b/spring-boot-starter-data-valkey/src/main/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyProperties.java
@@ -577,12 +577,6 @@ public static class Refresh {
*/
private @Nullable Duration period;
- /**
- * Whether adaptive topology refreshing using all available refresh
- * triggers should be used.
- */
- private boolean adaptive;
-
public boolean isDynamicRefreshSources() {
return this.dynamicRefreshSources;
}
@@ -599,14 +593,6 @@ public void setPeriod(@Nullable Duration period) {
this.period = period;
}
- public boolean isAdaptive() {
- return this.adaptive;
- }
-
- public void setAdaptive(boolean adaptive) {
- this.adaptive = adaptive;
- }
-
}
}
@@ -720,7 +706,6 @@ public static class Refresh {
private boolean dynamicRefreshSources = true;
private Duration period;
- private boolean adaptive;
public boolean isDynamicRefreshSources() {
return this.dynamicRefreshSources;
@@ -737,14 +722,6 @@ public Duration getPeriod() {
public void setPeriod(Duration period) {
this.period = period;
}
-
- public boolean isAdaptive() {
- return this.adaptive;
- }
-
- public void setAdaptive(boolean adaptive) {
- this.adaptive = adaptive;
- }
}
}
diff --git a/spring-boot-starter-data-valkey/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-starter-data-valkey/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index 16926515..c60eee98 100644
--- a/spring-boot-starter-data-valkey/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/spring-boot-starter-data-valkey/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -7,6 +7,15 @@
"description": "Whether to enable Valkey health check.",
"defaultValue": true
},
+ {
+ "name": "spring.data.valkey.lettuce.cluster.refresh.adaptive",
+ "type": "java.lang.Boolean",
+ "deprecation": {
+ "reason": "All adaptive triggers are enabled by default.",
+ "level": "error",
+ "since": "4.1.0"
+ }
+ },
{
"name": "spring.data.valkey.repositories.enabled",
"type": "java.lang.Boolean",
diff --git a/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationLettuceTests.java b/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationLettuceTests.java
index 638983fe..0e9735ec 100644
--- a/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationLettuceTests.java
+++ b/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationLettuceTests.java
@@ -18,7 +18,6 @@
import java.time.Duration;
import java.util.Arrays;
-import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -31,7 +30,6 @@
import io.lettuce.core.ReadFrom.Nodes;
import io.lettuce.core.RedisURI;
import io.lettuce.core.cluster.ClusterClientOptions;
-import io.lettuce.core.cluster.ClusterTopologyRefreshOptions.RefreshTrigger;
import io.lettuce.core.cluster.models.partitions.RedisClusterNode;
import io.lettuce.core.models.role.RedisNodeDescription;
import io.lettuce.core.resource.DefaultClientResources;
@@ -571,16 +569,6 @@ void testValkeyConfigurationWithClusterRefreshPeriod() {
(options) -> assertThat(options.getTopologyRefreshOptions().getRefreshPeriod()).hasSeconds(30)));
}
- @Test
- void testValkeyConfigurationWithClusterAdaptiveRefresh() {
- this.contextRunner
- .withPropertyValues("spring.data.valkey.cluster.nodes=127.0.0.1:27379,127.0.0.1:27380",
- "spring.data.valkey.lettuce.cluster.refresh.adaptive=true")
- .run(assertClientOptions(ClusterClientOptions.class,
- (options) -> assertThat(options.getTopologyRefreshOptions().getAdaptiveRefreshTriggers())
- .isEqualTo(EnumSet.allOf(RefreshTrigger.class))));
- }
-
@Test
void testValkeyConfigurationWithClusterRefreshPeriodHasNoEffectWithNonClusteredConfiguration() {
this.contextRunner.withPropertyValues("spring.data.valkey.cluster.refresh.period=30s")
diff --git a/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationTests.java b/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationTests.java
index 16695226..30906312 100644
--- a/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationTests.java
+++ b/spring-boot-starter-data-valkey/src/test/java/io/valkey/springframework/boot/autoconfigure/data/valkey/ValkeyAutoConfigurationTests.java
@@ -262,17 +262,6 @@ void testValkeyConfigurationWithClusterRefreshPeriod() {
});
}
- @Test
- void testValkeyConfigurationWithClusterAdaptiveRefresh() {
- this.contextRunner
- .withPropertyValues("spring.data.valkey.cluster.nodes=127.0.0.1:27379,127.0.0.1:27380",
- "spring.data.valkey.valkeyglide.cluster.refresh.adaptive=true")
- .run((context) -> {
- ValkeyProperties properties = context.getBean(ValkeyProperties.class);
- assertThat(properties.getValkeyGlide().getCluster().getRefresh().isAdaptive()).isTrue();
- });
- }
-
@Test
void testValkeyConfigurationWithClusterRefreshPeriodHasNoEffectWithNonClusteredConfiguration() {
this.contextRunner.withPropertyValues("spring.data.valkey.cluster.refresh.period=30s")