From 44aa79e2b243df0f94a0dd65de30ca188cee70e7 Mon Sep 17 00:00:00 2001 From: John Blum Date: Thu, 19 Oct 2023 14:53:44 -0700 Subject: [PATCH] =?UTF-8?q?Replace=20use=20of=20`String.format(=E2=80=A6)`?= =?UTF-8?q?=20with=20formatted=20Strings.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original pull request: #2752 Closes #2751 --- .../data/redis/ClusterRedirectException.java | 2 +- .../redis/cache/DefaultRedisCacheWriter.java | 4 +- .../data/redis/cache/RedisCache.java | 18 +++---- .../redis/cache/RedisCacheConfiguration.java | 8 ++- .../connection/ClusterCommandExecutor.java | 13 ++--- .../redis/connection/ClusterTopology.java | 8 +-- .../data/redis/connection/RedisNode.java | 13 +++-- .../data/redis/connection/RedisPassword.java | 2 +- .../RedisSentinelConfiguration.java | 4 +- .../connection/RedisSocketConfiguration.java | 2 +- .../RedisStandaloneConfiguration.java | 4 +- ...RedisStaticMasterReplicaConfiguration.java | 2 +- .../redis/connection/convert/Converters.java | 2 +- .../jedis/JedisClusterConnection.java | 8 +-- .../jedis/JedisClusterServerCommands.java | 7 +-- .../jedis/JedisClusterZSetCommands.java | 18 ++++--- .../jedis/JedisConnectionFactory.java | 10 ++-- .../connection/jedis/JedisConverters.java | 6 +-- .../connection/jedis/JedisServerCommands.java | 2 +- .../connection/jedis/JedisZSetCommands.java | 16 +++--- .../lettuce/ClusterConnectionProvider.java | 5 +- .../lettuce/LettuceClusterConnection.java | 6 +-- .../connection/lettuce/LettuceConnection.java | 14 ++--- .../lettuce/LettuceConnectionFactory.java | 8 +-- .../connection/lettuce/LettuceConverters.java | 4 +- .../LettucePoolingConnectionProvider.java | 5 +- .../lettuce/LettuceReactiveListCommands.java | 2 +- .../LettuceReactivePubSubCommands.java | 2 +- .../LettuceReactiveServerCommands.java | 2 +- .../LettuceReactiveStringCommands.java | 2 +- .../connection/lettuce/LettuceScanCursor.java | 4 +- .../lettuce/LettuceServerCommands.java | 3 +- .../lettuce/LettuceZSetCommands.java | 16 +++--- ...StaticMasterReplicaConnectionProvider.java | 4 +- .../MicrometerTracingAdapter.java | 6 +-- .../redis/connection/stream/Consumer.java | 2 +- .../connection/stream/StreamRecords.java | 2 +- .../data/redis/core/IndexWriter.java | 9 ++-- .../data/redis/core/RedisCommand.java | 16 +++--- .../data/redis/core/RedisConnectionUtils.java | 4 +- .../redis/core/convert/BinaryConverters.java | 2 +- .../core/convert/MappingRedisConverter.java | 20 ++++--- .../redis/core/index/GeoIndexDefinition.java | 4 +- .../mapping/BasicRedisPersistentEntity.java | 12 ++--- .../core/mapping/RedisMappingContext.java | 16 +++--- .../data/redis/core/script/DigestUtils.java | 3 +- .../redis/core/types/RedisClientInfo.java | 3 +- .../data/redis/domain/geo/BoundingBox.java | 2 +- .../data/redis/hash/BeanUtilsHashMapper.java | 2 +- .../data/redis/hash/Jackson2HashMapper.java | 3 +- .../RedisMessageListenerContainer.java | 15 +++--- .../adapter/MessageListenerAdapter.java | 9 ++-- .../data/redis/repository/cdi/CdiBean.java | 5 +- .../cdi/RedisRepositoryExtension.java | 25 ++++----- .../core/MappingRedisEntityInformation.java | 5 +- .../repository/query/ExampleQueryMapper.java | 4 +- .../repository/query/RedisQueryCreator.java | 21 ++++---- .../serializer/DefaultRedisElementWriter.java | 6 ++- .../GenericJackson2JsonRedisSerializer.java | 6 +-- .../redis/stream/DefaultStreamReceiver.java | 52 +++++++++---------- .../support/atomic/RedisAtomicDouble.java | 3 +- .../support/atomic/RedisAtomicInteger.java | 3 +- .../redis/support/atomic/RedisAtomicLong.java | 3 +- .../collections/AbstractRedisCollection.java | 9 +--- .../collections/ReversedRedisListView.java | 5 +- .../data/redis/util/RedisAssertions.java | 4 +- .../data/redis/SettingsUtils.java | 12 +++-- .../connection/ClusterSlotHashUtilsTests.java | 2 +- .../JedisConnectionIntegrationTests.java | 4 +- .../LettuceConnectionFactoryTests.java | 9 ++-- ...tiveScriptingCommandsIntegrationTests.java | 2 +- .../redis/core/RedisKeyValueAdapterTests.java | 2 +- .../BasicRedisPersistentEntityUnitTests.java | 6 +-- .../EnabledOnRedisAvailableCondition.java | 4 +- .../EnabledOnRedisClusterCondition.java | 4 +- .../EnabledOnRedisDriverCondition.java | 7 ++- .../EnabledOnRedisSentinelCondition.java | 7 ++- .../EnabledOnRedisVersionCondition.java | 15 +++--- .../ParameterizedRedisTestExtension.java | 23 ++++---- .../ParameterizedTestNameFormatter.java | 5 +- .../data/redis/test/util/MockitoUtils.java | 2 +- .../data/redis/test/util/RedisTestData.java | 2 +- 82 files changed, 285 insertions(+), 328 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/ClusterRedirectException.java b/src/main/java/org/springframework/data/redis/ClusterRedirectException.java index 3f8abc581..ee90d0f89 100644 --- a/src/main/java/org/springframework/data/redis/ClusterRedirectException.java +++ b/src/main/java/org/springframework/data/redis/ClusterRedirectException.java @@ -46,7 +46,7 @@ public class ClusterRedirectException extends DataRetrievalFailureException { */ public ClusterRedirectException(int slot, String targetHost, int targetPort, Throwable e) { - super(String.format("Redirect: slot %s to %s:%s.", slot, targetHost, targetPort), e); + super("Redirect: slot %s to %s:%s.".formatted(slot, targetHost, targetPort), e); this.slot = slot; this.host = targetHost; diff --git a/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java b/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java index f82aa50a7..f5a73e6ea 100644 --- a/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java +++ b/src/main/java/org/springframework/data/redis/cache/DefaultRedisCacheWriter.java @@ -445,9 +445,7 @@ class DefaultRedisCacheWriter implements RedisCacheWriter { // Re-interrupt current Thread to allow other participants to react. Thread.currentThread().interrupt(); - String message = String.format("Interrupted while waiting to unlock cache %s", name); - - throw new PessimisticLockingFailureException(message, ex); + throw new PessimisticLockingFailureException("Interrupted while waiting to unlock cache %s".formatted(name), ex); } finally { this.statistics.incLockTime(name, System.nanoTime() - lockWaitTimeNs); } diff --git a/src/main/java/org/springframework/data/redis/cache/RedisCache.java b/src/main/java/org/springframework/data/redis/cache/RedisCache.java index fe747b7aa..c900387fe 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCache.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCache.java @@ -298,12 +298,9 @@ public class RedisCache extends AbstractValueAdaptingCache { Object cacheValue = preProcessCacheValue(value); if (nullCacheValueIsNotAllowed(cacheValue)) { - - String message = String.format("Cache '%s' does not allow 'null' values; Avoid storing null" + throw new IllegalArgumentException(("Cache '%s' does not allow 'null' values; Avoid storing null" + " via '@Cacheable(unless=\"#result == null\")' or configure RedisCache to allow 'null'" - + " via RedisCacheConfiguration", getName()); - - throw new IllegalArgumentException(message); + + " via RedisCacheConfiguration").formatted(getName())); } return cacheValue; @@ -414,12 +411,9 @@ public class RedisCache extends AbstractValueAdaptingCache { return key.toString(); } - String message = String.format( - "Cannot convert cache key %s to String; Please register a suitable Converter" - + " via 'RedisCacheConfiguration.configureKeyConverters(...)' or override '%s.toString()'", - source, key.getClass().getName()); - - throw new IllegalStateException(message); + throw new IllegalStateException(("Cannot convert cache key %s to String; Please register a suitable Converter" + + " via 'RedisCacheConfiguration.configureKeyConverters(...)' or override '%s.toString()'") + .formatted(source, key.getClass().getName())); } private CompletableFuture retrieveValue(Object key) { @@ -484,7 +478,7 @@ public class RedisCache extends AbstractValueAdaptingCache { return "[" + stringJoiner + "]"; } - throw new IllegalArgumentException(String.format("Cannot convert cache key [%s] to String", key)); + throw new IllegalArgumentException("Cannot convert cache key [%s] to String".formatted(key)); } private byte[] createAndConvertCacheKey(Object key) { diff --git a/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java b/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java index 261c932ab..a8bf4cd44 100644 --- a/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java +++ b/src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java @@ -424,11 +424,9 @@ public class RedisCacheConfiguration { public void configureKeyConverters(Consumer registryConsumer) { if (!(getConversionService() instanceof ConverterRegistry)) { - - String message = "'%s' returned by getConversionService() does not allow Converter registration;" - + " Please make sure to provide a ConversionService that implements ConverterRegistry"; - - throw new IllegalStateException(String.format(message, getConversionService().getClass().getName())); + throw new IllegalStateException(("'%s' returned by getConversionService() does not allow Converter registration;" + + " Please make sure to provide a ConversionService that implements ConverterRegistry") + .formatted(getConversionService().getClass().getName())); } registryConsumer.accept((ConverterRegistry) getConversionService()); diff --git a/src/main/java/org/springframework/data/redis/connection/ClusterCommandExecutor.java b/src/main/java/org/springframework/data/redis/connection/ClusterCommandExecutor.java index 3e896e53d..4bbf07bc8 100644 --- a/src/main/java/org/springframework/data/redis/connection/ClusterCommandExecutor.java +++ b/src/main/java/org/springframework/data/redis/connection/ClusterCommandExecutor.java @@ -130,12 +130,9 @@ public class ClusterCommandExecutor implements DisposableBean { Assert.notNull(node, "RedisClusterNode must not be null"); if (redirectCount > this.maxRedirects) { - - String message = String.format("Cannot follow Cluster Redirects over more than %s legs; " - + "Consider increasing the number of redirects to follow; Current value is: %s.", - redirectCount, this.maxRedirects); - - throw new TooManyClusterRedirectionsException(message); + throw new TooManyClusterRedirectionsException(("Cannot follow Cluster Redirects over more than %s legs;" + + " Consider increasing the number of redirects to follow; Current value is: %s") + .formatted(redirectCount, this.maxRedirects)); } RedisClusterNode nodeToUse = lookupNode(node); @@ -178,7 +175,7 @@ public class ClusterCommandExecutor implements DisposableBean { try { return topologyProvider.getTopology().lookup(node); } catch (ClusterStateFailureException ex) { - throw new IllegalArgumentException(String.format("Node %s is unknown to cluster", node), ex); + throw new IllegalArgumentException("Node %s is unknown to cluster".formatted(node), ex); } } @@ -215,7 +212,7 @@ public class ClusterCommandExecutor implements DisposableBean { try { resolvedRedisClusterNodes.add(topology.lookup(node)); } catch (ClusterStateFailureException ex) { - throw new IllegalArgumentException(String.format("Node %s is unknown to cluster", node), ex); + throw new IllegalArgumentException("Node %s is unknown to cluster".formatted(node), ex); } } diff --git a/src/main/java/org/springframework/data/redis/connection/ClusterTopology.java b/src/main/java/org/springframework/data/redis/connection/ClusterTopology.java index bb82facae..1ea254bdb 100644 --- a/src/main/java/org/springframework/data/redis/connection/ClusterTopology.java +++ b/src/main/java/org/springframework/data/redis/connection/ClusterTopology.java @@ -141,7 +141,7 @@ public class ClusterTopology { } throw new ClusterStateFailureException( - String.format("Could not find master node serving slot %s for key '%s',", slot, Arrays.toString(key))); + "Could not find master node serving slot %s for key '%s',".formatted(slot, Arrays.toString(key))); } /** @@ -161,7 +161,7 @@ public class ClusterTopology { } throw new ClusterStateFailureException( - String.format("Could not find node at %s:%s; Is your cluster info up to date", host, port)); + "Could not find node at %s:%d; Is your cluster info up to date".formatted(host, port)); } /** @@ -182,7 +182,7 @@ public class ClusterTopology { } throw new ClusterStateFailureException( - String.format("Could not find node at %s; Is your cluster info up to date", nodeId)); + "Could not find node at %s; Is your cluster info up to date".formatted(nodeId)); } /** @@ -210,7 +210,7 @@ public class ClusterTopology { } throw new ClusterStateFailureException( - String.format("Could not find node at %s; Have you provided either host and port or the nodeId", node)); + ("Could not find node at %s;" + " Have you provided either host and port or the nodeId").formatted(node)); } /** diff --git a/src/main/java/org/springframework/data/redis/connection/RedisNode.java b/src/main/java/org/springframework/data/redis/connection/RedisNode.java index ad6841054..2ea0e6dd1 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisNode.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisNode.java @@ -102,11 +102,11 @@ public class RedisNode implements NamedNode { try { port = Integer.parseInt(portString); } catch (RuntimeException ignore) { - throw new IllegalArgumentException(String.format("Unparseable port number: %s", hostPortString)); + throw new IllegalArgumentException("Unparseable port number: %s".formatted(hostPortString)); } if (!isValidPort(port)) { - throw new IllegalArgumentException(String.format("Port number out of range: %s", hostPortString)); + throw new IllegalArgumentException("Port number out of range: %s".formatted(hostPortString)); } return new RedisNode(host, port); @@ -123,14 +123,14 @@ public class RedisNode implements NamedNode { if (hostPortString.charAt(0) != '[') { throw new IllegalArgumentException( - String.format("Bracketed host-port string must start with a bracket: %s", hostPortString)); + "Bracketed host-port string must start with a bracket: %s".formatted(hostPortString)); } int colonIndex = hostPortString.indexOf(':'); int closeBracketIndex = hostPortString.lastIndexOf(']'); if (!(colonIndex > -1 && closeBracketIndex > colonIndex)) { - throw new IllegalArgumentException(String.format("Invalid bracketed host/port: %s", hostPortString)); + throw new IllegalArgumentException("Invalid bracketed host/port: %s".formatted(hostPortString)); } String host = hostPortString.substring(1, closeBracketIndex); @@ -138,12 +138,11 @@ public class RedisNode implements NamedNode { return new String[] { host, "" }; } else { if (!(hostPortString.charAt(closeBracketIndex + 1) == ':')) { - throw new IllegalArgumentException( - String.format("Only a colon may follow a close bracket: %s", hostPortString)); + throw new IllegalArgumentException("Only a colon may follow a close bracket: %s".formatted(hostPortString)); } for (int i = closeBracketIndex + 2; i < hostPortString.length(); ++i) { if (!Character.isDigit(hostPortString.charAt(i))) { - throw new IllegalArgumentException(String.format("Port must be numeric: %s", hostPortString)); + throw new IllegalArgumentException("Port must be numeric: %s".formatted(hostPortString)); } } return new String[] { host, hostPortString.substring(closeBracketIndex + 2) }; diff --git a/src/main/java/org/springframework/data/redis/connection/RedisPassword.java b/src/main/java/org/springframework/data/redis/connection/RedisPassword.java index 89c8713ea..56229c84f 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisPassword.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisPassword.java @@ -140,7 +140,7 @@ public class RedisPassword { @Override public String toString() { - return String.format("%s[%s]", getClass().getSimpleName(), isPresent() ? "*****" : ""); + return "%s[%s]".formatted(getClass().getSimpleName(), isPresent() ? "*****" : ""); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java index 24b390724..f9683193c 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisSentinelConfiguration.java @@ -150,7 +150,7 @@ public class RedisSentinelConfiguration implements RedisConfiguration, SentinelC try { database = Integer.parseInt(databaseSource); } catch (NumberFormatException ex) { - throw new IllegalArgumentException(String.format("Invalid DB index '%s'; integer required", databaseSource)); + throw new IllegalArgumentException("Invalid DB index '%s'; integer required".formatted(databaseSource)); } this.setDatabase(database); } @@ -266,7 +266,7 @@ public class RedisSentinelConfiguration implements RedisConfiguration, SentinelC @Override public void setDatabase(int index) { - Assert.isTrue(index >= 0, () -> String.format("Invalid DB index '%d'; non-negative index required", index)); + Assert.isTrue(index >= 0, "Invalid DB index '%d'; non-negative index required".formatted(index)); this.database = index; } diff --git a/src/main/java/org/springframework/data/redis/connection/RedisSocketConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisSocketConfiguration.java index 5e41c44a7..4f9a0336d 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisSocketConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisSocketConfiguration.java @@ -74,7 +74,7 @@ public class RedisSocketConfiguration implements RedisConfiguration, DomainSocke @Override public void setDatabase(int index) { - Assert.isTrue(index >= 0, () -> String.format("Invalid DB index '%s' (a positive index required)", index)); + Assert.isTrue(index >= 0, () -> "Invalid DB index '%s'; non-negative index required".formatted(index)); this.database = index; } diff --git a/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java index f7d8b2372..d106dda37 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisStandaloneConfiguration.java @@ -70,7 +70,7 @@ public class RedisStandaloneConfiguration Assert.hasText(hostName, "Host name must not be null or empty"); Assert.isTrue(port >= 1 && port <= 65535, - () -> String.format("Port %d must be a valid TCP port in the range between 1-65535", port)); + "Port %d must be a valid TCP port in the range between 1-65535".formatted(port)); this.hostName = hostName; this.port = port; @@ -103,7 +103,7 @@ public class RedisStandaloneConfiguration @Override public void setDatabase(int index) { - Assert.isTrue(index >= 0, () -> String.format("Invalid DB index '%s' (a positive index required)", index)); + Assert.isTrue(index >= 0, "Invalid DB index '%d'; non-negative index required".formatted(index)); this.database = index; } diff --git a/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java b/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java index 1b60bf7a9..f3033f817 100644 --- a/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java +++ b/src/main/java/org/springframework/data/redis/connection/RedisStaticMasterReplicaConfiguration.java @@ -118,7 +118,7 @@ public class RedisStaticMasterReplicaConfiguration implements RedisConfiguration @Override public void setDatabase(int index) { - Assert.isTrue(index >= 0, () -> String.format("Invalid DB index '%s' (a positive index required)", index)); + Assert.isTrue(index >= 0, "Invalid DB index '%d'; non-negative index required".formatted(index)); this.database = index; this.nodes.forEach(it -> it.setDatabase(database)); diff --git a/src/main/java/org/springframework/data/redis/connection/convert/Converters.java b/src/main/java/org/springframework/data/redis/connection/convert/Converters.java index 98ec282fa..b0ef79f89 100644 --- a/src/main/java/org/springframework/data/redis/connection/convert/Converters.java +++ b/src/main/java/org/springframework/data/redis/connection/convert/Converters.java @@ -410,7 +410,7 @@ public abstract class Converters { } if (LOGGER.isDebugEnabled()) { - LOGGER.debug(String.format("parsing %s (%s) as %s", sourcePath, path, targetType)); + LOGGER.debug("parsing %s (%s) as %s".formatted(sourcePath, path, targetType)); } if (targetType == Object.class) { diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java index 5b68de45e..ace9d4acb 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterConnection.java @@ -761,7 +761,7 @@ public class JedisClusterConnection implements RedisClusterConnection { return new Jedis(connection); } - throw new DataAccessResourceFailureException(String.format("Node %s is unknown to cluster", node)); + throw new DataAccessResourceFailureException("Node %s is unknown to cluster".formatted(node)); } private ConnectionPool getResourcePoolForSpecificNode(RedisClusterNode node) { @@ -779,8 +779,8 @@ public class JedisClusterConnection implements RedisClusterConnection { RedisClusterNode member = topologyProvider.getTopology().lookup(node); if (!member.hasValidHost()) { - throw new DataAccessResourceFailureException(String - .format("Cannot obtain connection to node %ss as it is not associated with a hostname", node.getId())); + throw new DataAccessResourceFailureException( + "Cannot obtain connection to node %ss; " + "it is not associated with a hostname".formatted(node.getId())); } if (member != null && connectionHandler != null) { @@ -872,7 +872,7 @@ public class JedisClusterConnection implements RedisClusterConnection { StringBuilder stringBuilder = new StringBuilder(); for (Entry entry : errors.entrySet()) { - stringBuilder.append(String.format("\r\n\t- %s failed: %s", entry.getKey(), entry.getValue().getMessage())); + stringBuilder.append("\r\n\t- %s failed: %s".formatted(entry.getKey(), entry.getValue().getMessage())); } throw new ClusterStateFailureException( diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java index c0b61ae75..a48a35092 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterServerCommands.java @@ -347,10 +347,11 @@ class JedisClusterServerCommands implements RedisClusterServerCommands { public void killClient(String host, int port) { Assert.hasText(host, "Host for 'CLIENT KILL' must not be 'null' or 'empty'"); - String hostAndPort = String.format("%s:%s", host, port); + String hostAndPort = "%s:%d".formatted(host, port); - connection.getClusterCommandExecutor() - .executeCommandOnAllNodes((JedisClusterCommandCallback) client -> client.clientKill(hostAndPort)); + JedisClusterCommandCallback command = client -> client.clientKill(hostAndPort); + + connection.getClusterCommandExecutor().executeCommandOnAllNodes(command); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java index 156fb87fb..5d9970973 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java @@ -908,8 +908,9 @@ class JedisClusterZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + () -> "The number of weights %d must match the number of source sets %d".formatted(weights.size(), + sets.length)); if (ClusterSlotHashUtil.isSameSlotForAllKeys(sets)) { @@ -951,8 +952,8 @@ class JedisClusterZSetCommands implements RedisZSetCommands { Assert.notNull(destKey, "Destination key must not be null"); Assert.notNull(sets, "Source sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); byte[][] allKeys = ByteUtils.mergeArrays(destKey, sets); @@ -1008,8 +1009,9 @@ class JedisClusterZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + () -> "The number of weights %d must match the number of source sets %d".formatted(weights.size(), + sets.length)); if (ClusterSlotHashUtil.isSameSlotForAllKeys(sets)) { @@ -1052,8 +1054,8 @@ class JedisClusterZSetCommands implements RedisZSetCommands { Assert.notNull(destKey, "Destination key must not be null"); Assert.notNull(sets, "Source sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); byte[][] allKeys = ByteUtils.mergeArrays(destKey, sets); diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java index 4e83c271c..21bd50df5 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java @@ -1003,7 +1003,7 @@ public class JedisConnectionFactory return jedis; } } catch (Exception ex) { - log.warn(String.format("Ping failed for sentinel host: %s", node.getHost()), ex); + log.warn("Ping failed for sentinel host: %s".formatted(node.getHost()), ex); } finally { if (!success && jedis != null) { jedis.close(); @@ -1040,8 +1040,8 @@ public class JedisConnectionFactory private MutableJedisClientConfiguration getMutableConfiguration() { Assert.state(clientConfiguration instanceof MutableJedisClientConfiguration, - () -> String.format("Client configuration must be instance of MutableJedisClientConfiguration but is %s", - ClassUtils.getShortName(clientConfiguration.getClass()))); + () -> "Client configuration must be instance of MutableJedisClientConfiguration but is %s" + .formatted(ClassUtils.getShortName(clientConfiguration.getClass()))); return (MutableJedisClientConfiguration) clientConfiguration; } @@ -1056,10 +1056,10 @@ public class JedisConnectionFactory switch (current) { case CREATED, STOPPED -> throw new IllegalStateException( - String.format("JedisConnectionFactory has been %s. Use start() to initialize it", current)); + "JedisConnectionFactory has been %s. Use start() to initialize it".formatted(current)); case DESTROYED -> throw new IllegalStateException("JedisConnectionFactory was destroyed and cannot be used anymore"); - default -> throw new IllegalStateException(String.format("JedisConnectionFactory is %s", current)); + default -> throw new IllegalStateException("JedisConnectionFactory is %s".formatted(current)); } } diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConverters.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConverters.java index 426d36057..6ffa002cb 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConverters.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConverters.java @@ -472,7 +472,7 @@ abstract class JedisConverters extends Converters { } else if (theValue instanceof String string) { value = toBytes(string); } else { - throw new IllegalArgumentException(String.format("Cannot convert %s to binary format", boundary.getValue())); + throw new IllegalArgumentException("Cannot convert %s to binary format".formatted(boundary.getValue())); } ByteBuffer buffer = ByteBuffer.allocate(prefix.length + value.length); @@ -770,7 +770,7 @@ abstract class JedisConverters extends Converters { return param; } - throw new IllegalArgumentException(String.format("Cannot convert %s to Jedis GeoSearchParam", predicate)); + throw new IllegalArgumentException("Cannot convert %s to Jedis GeoSearchParam".formatted(predicate)); } private static void configureGeoReference(GeoReference reference, GeoSearchParam param) { @@ -787,7 +787,7 @@ abstract class JedisConverters extends Converters { return; } - throw new IllegalArgumentException(String.format("Cannot extract Geo Reference from %s", reference)); + throw new IllegalArgumentException("Cannot extract Geo Reference from %s".formatted(reference)); } /** diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java index bab052259..3aa8fb9ea 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisServerCommands.java @@ -161,7 +161,7 @@ class JedisServerCommands implements RedisServerCommands { Assert.hasText(host, "Host for 'CLIENT KILL' must not be 'null' or 'empty'"); - connection.invokeStatus().just(it -> it.clientKill(String.format("%s:%s", host, port))); + connection.invokeStatus().just(it -> it.clientKill("%s:%s".formatted(host, port))); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java index 749e198bc..cbb4eb40d 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java @@ -474,8 +474,8 @@ class JedisZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights (%d) must match the number of source sets (%d)".formatted(weights.size(), sets.length)); return connection.invoke().fromMany(Jedis::zinterWithScores, PipelineBinaryCommands::zinterWithScores, toZParams(aggregate, weights), sets).toSet(JedisConverters::toTuple); @@ -487,8 +487,8 @@ class JedisZSetCommands implements RedisZSetCommands { Assert.notNull(destKey, "Destination key must not be null"); Assert.notNull(sets, "Source sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); ZParams zparams = toZParams(aggregate, weights); @@ -528,8 +528,8 @@ class JedisZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); return connection.invoke().fromMany(Jedis::zunionWithScores, PipelineBinaryCommands::zunionWithScores, toZParams(aggregate, weights), sets).toSet(JedisConverters::toTuple); @@ -542,8 +542,8 @@ class JedisZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Source sets must not be null"); Assert.notNull(weights, "Weights must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); ZParams zparams = toZParams(aggregate, weights); diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/ClusterConnectionProvider.java b/src/main/java/org/springframework/data/redis/connection/lettuce/ClusterConnectionProvider.java index 0b2061f5a..3426bb4cf 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/ClusterConnectionProvider.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/ClusterConnectionProvider.java @@ -120,9 +120,8 @@ class ClusterConnectionProvider implements LettuceConnectionProvider, RedisClien }); } - String message = String.format("Connection type %s not supported", connectionType); - - return LettuceFutureUtils.failed(new InvalidDataAccessApiUsageException(message)); + return LettuceFutureUtils + .failed(new InvalidDataAccessApiUsageException("Connection type %s not supported".formatted(connectionType))); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClusterConnection.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClusterConnection.java index 3756e9f8b..f02cfe00e 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClusterConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceClusterConnection.java @@ -216,10 +216,8 @@ public class LettuceClusterConnection extends LettuceConnection return (RedisClusterClient) redisClientProvider.getRedisClient(); } - String message = String.format("Connection provider %s does not implement RedisClientProvider", - connectionProvider.getClass().getName()); - - throw new IllegalStateException(message); + throw new IllegalStateException("Connection provider %s does not implement RedisClientProvider" + .formatted(connectionProvider.getClass().getName())); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java index c3ecbde73..0016e73a4 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java @@ -328,7 +328,7 @@ public class LettuceConnection extends AbstractRedisConnection { @SuppressWarnings({ "rawtypes", "unchecked" }) public Object execute(String command, @Nullable CommandOutput commandOutputTypeHint, byte[]... args) { - Assert.hasText(command, () -> String.format("A valid command [%s] needs to be specified", command)); + Assert.hasText(command, () -> "A valid command [%s] needs to be specified".formatted(command)); ProtocolKeyword commandType = getCommandType(command.trim().toUpperCase()); @@ -937,9 +937,7 @@ public class LettuceConnection extends AbstractRedisConnection { return statefulClusterConnection.sync(); } - String message = String.format("%s is not a supported connection type", connection.getClass().getName()); - - throw new IllegalStateException(message); + throw new IllegalStateException("%s is not a supported connection type".formatted(connection.getClass().getName())); } protected RedisClusterAsyncCommands getAsyncDedicatedConnection() { @@ -953,13 +951,12 @@ public class LettuceConnection extends AbstractRedisConnection { if (connection instanceof StatefulRedisConnection statefulConnection) { return statefulConnection.async(); } + if (asyncDedicatedConnection instanceof StatefulRedisClusterConnection statefulClusterConnection) { return statefulClusterConnection.async(); } - String message = String.format("%s is not a supported connection type", connection.getClass().getName()); - - throw new IllegalStateException(message); + throw new IllegalStateException("%s is not a supported connection type".formatted(connection.getClass().getName())); } @SuppressWarnings("unchecked") @@ -1091,8 +1088,7 @@ public class LettuceConnection extends AbstractRedisConnection { try { redisCommand.validateArgumentCount(args != null ? args.length : 0); } catch (IllegalArgumentException ex) { - String message = String.format("Validation failed for %s command", command); - throw new InvalidDataAccessApiUsageException(message, ex); + throw new InvalidDataAccessApiUsageException("Validation failed for %s command".formatted(command), ex); } } } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java index e673c8257..fdbc882a9 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java @@ -1444,10 +1444,10 @@ public class LettuceConnectionFactory implements RedisConnectionFactory, Reactiv switch (current) { case CREATED, STOPPED -> throw new IllegalStateException( - String.format("LettuceConnectionFactory has been %s. Use start() to initialize it", current)); + "LettuceConnectionFactory has been %s. Use start() to initialize it".formatted(current)); case DESTROYED -> throw new IllegalStateException("LettuceConnectionFactory was destroyed and cannot be used anymore"); - default -> throw new IllegalStateException(String.format("LettuceConnectionFactory is %s", current)); + default -> throw new IllegalStateException("LettuceConnectionFactory is %s".formatted(current)); } } @@ -1500,8 +1500,8 @@ public class LettuceConnectionFactory implements RedisConnectionFactory, Reactiv private MutableLettuceClientConfiguration getMutableConfiguration() { Assert.state(clientConfiguration instanceof MutableLettuceClientConfiguration, - () -> String.format("Client configuration must be instance of MutableLettuceClientConfiguration but is %s", - ClassUtils.getShortName(clientConfiguration.getClass()))); + () -> "Client configuration must be instance of MutableLettuceClientConfiguration but is %s" + .formatted(ClassUtils.getShortName(clientConfiguration.getClass()))); return (MutableLettuceClientConfiguration) clientConfiguration; } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java index 450045a01..bb443b116 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java @@ -871,7 +871,7 @@ public abstract class LettuceConverters extends Converters { toGeoArgsUnit(boxPredicate.getMetric())); } - throw new IllegalArgumentException(String.format("Cannot convert %s to Lettuce GeoPredicate", predicate)); + throw new IllegalArgumentException("Cannot convert %s to Lettuce GeoPredicate".formatted(predicate)); } static GeoSearch.GeoRef toGeoRef(GeoReference reference) { @@ -885,7 +885,7 @@ public abstract class LettuceConverters extends Converters { return GeoSearch.fromCoordinates(coordinates.getLongitude(), coordinates.getLatitude()); } - throw new IllegalArgumentException(String.format("Cannot convert %s to Lettuce GeoRef", reference)); + throw new IllegalArgumentException("Cannot convert %s to Lettuce GeoRef".formatted(reference)); } static FlushMode toFlushMode(@Nullable RedisServerCommands.FlushOption option) { diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java index 5b888e8f0..79e6b5e83 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettucePoolingConnectionProvider.java @@ -135,9 +135,8 @@ class LettucePoolingConnectionProvider implements LettuceConnectionProvider, Red return ((RedisClientProvider) connectionProvider).getRedisClient(); } - throw new IllegalStateException( - String.format("Underlying connection provider %s does not implement RedisClientProvider", - connectionProvider.getClass().getName())); + throw new IllegalStateException("Underlying connection provider %s does not implement RedisClientProvider" + .formatted(connectionProvider.getClass().getName())); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveListCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveListCommands.java index 2721877f4..e0f6f416c 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveListCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveListCommands.java @@ -74,7 +74,7 @@ class LettuceReactiveListCommands implements ReactiveListCommands { if (!command.getUpsert() && command.getValues().size() > 1) { throw new InvalidDataAccessApiUsageException( - String.format("%s PUSHX only allows one value", command.getDirection())); + "%s PUSHX only allows one value".formatted(command.getDirection())); } Mono pushResult; diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactivePubSubCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactivePubSubCommands.java index 7e2507467..67ca0b0b8 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactivePubSubCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactivePubSubCommands.java @@ -233,7 +233,7 @@ class LettuceReactivePubSubCommands implements ReactivePubSubCommands { @Override public String toString() { - return String.format("%s: Subscribers: %s", new String(raw), SUBSCRIBERS.get(this)); + return "%s: Subscribers: %s".formatted(new String(raw), SUBSCRIBERS.get(this)); } } } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveServerCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveServerCommands.java index f3aa9bd2a..c88df347e 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveServerCommands.java @@ -154,7 +154,7 @@ class LettuceReactiveServerCommands implements ReactiveServerCommands { Assert.notNull(host, "Host must not be null or empty"); - return connection.execute(c -> c.clientKill(String.format("%s:%s", host, port))).next(); + return connection.execute(c -> c.clientKill("%s:%d".formatted(host, port))).next(); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveStringCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveStringCommands.java index 5008c5e68..7beb8a3bd 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveStringCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveStringCommands.java @@ -364,7 +364,7 @@ class LettuceReactiveStringCommands implements ReactiveStringCommands { Assert.isTrue(sourceKeys.length == 1, "BITOP NOT does not allow more than 1 source key."); yield reactiveCommands.bitopNot(destinationKey, sourceKeys[0]); } - default -> throw new IllegalArgumentException(String.format("Unknown BITOP '%s'", command.getBitOp())); + default -> throw new IllegalArgumentException("Unknown BITOP '%s'".formatted(command.getBitOp())); }; return result.map(value -> new NumericResponse<>(command, value)); diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceScanCursor.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceScanCursor.java index 6f5ed1a94..50ae5712b 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceScanCursor.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceScanCursor.java @@ -59,8 +59,8 @@ abstract class LettuceScanCursor extends ScanCursor { } } - throw new IllegalArgumentException(String.format("Current scan %s state and cursor %d do not match", - state != null ? state.getCursor() : "(none)", cursorId)); + throw new IllegalArgumentException("Current scan %s state and cursor %d do not match" + .formatted(state != null ? state.getCursor() : "(none)", cursorId)); } @Override diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java index 54a1dcfd6..005fc8c38 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceServerCommands.java @@ -26,7 +26,6 @@ import java.util.Properties; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; -import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.redis.connection.RedisNode; import org.springframework.data.redis.connection.RedisServerCommands; import org.springframework.data.redis.core.types.RedisClientInfo; @@ -173,7 +172,7 @@ class LettuceServerCommands implements RedisServerCommands { Assert.hasText(host, "Host for 'CLIENT KILL' must not be 'null' or 'empty'"); - String client = String.format("%s:%s", host, port); + String client = "%s:%d".formatted(host, port); connection.invoke().just(RedisServerAsyncCommands::clientKill, client); } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java index 9ebccac7b..e29aa50dc 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java @@ -441,8 +441,8 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); ZAggregateArgs zAggregateArgs = zAggregateArgs(aggregate, weights); @@ -456,8 +456,8 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(destKey, "Destination key must not be null"); Assert.notNull(sets, "Source sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); ZStoreArgs storeArgs = zStoreArgs(aggregate, weights); @@ -496,8 +496,8 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(sets, "Sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); ZAggregateArgs zAggregateArgs = zAggregateArgs(aggregate, weights); @@ -511,8 +511,8 @@ class LettuceZSetCommands implements RedisZSetCommands { Assert.notNull(destKey, "Destination key must not be null"); Assert.notNull(sets, "Source sets must not be null"); Assert.noNullElements(sets, "Source sets must not contain null elements"); - Assert.isTrue(weights.size() == sets.length, () -> String - .format("The number of weights (%d) must match the number of source sets (%d)", weights.size(), sets.length)); + Assert.isTrue(weights.size() == sets.length, + "The number of weights %d must match the number of source sets %d".formatted(weights.size(), sets.length)); ZStoreArgs storeArgs = zStoreArgs(aggregate, weights); diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java b/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java index ca3d4337b..c77d4d077 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/StaticMasterReplicaConnectionProvider.java @@ -79,7 +79,7 @@ class StaticMasterReplicaConnectionProvider implements LettuceConnectionProvider return connectionType.cast(connection); } - throw new UnsupportedOperationException(String.format("Connection type %s not supported", connectionType)); + throw new UnsupportedOperationException("Connection type %s not supported".formatted(connectionType)); } @Override @@ -97,6 +97,6 @@ class StaticMasterReplicaConnectionProvider implements LettuceConnectionProvider }); } - throw new UnsupportedOperationException(String.format("Connection type %s not supported", connectionType)); + throw new UnsupportedOperationException("Connection type %s not supported".formatted(connectionType)); } } diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/observability/MicrometerTracingAdapter.java b/src/main/java/org/springframework/data/redis/connection/lettuce/observability/MicrometerTracingAdapter.java index 21c28a41e..2f974056b 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/observability/MicrometerTracingAdapter.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/observability/MicrometerTracingAdapter.java @@ -217,7 +217,7 @@ public class MicrometerTracingAdapter implements Tracing { this.command = command; if (log.isDebugEnabled()) { - log.debug(String.format("Starting Observation for Command %s", command)); + log.debug("Starting Observation for Command %s".formatted(command)); } if (command instanceof CompleteableCommand completeableCommand) { @@ -265,7 +265,7 @@ public class MicrometerTracingAdapter implements Tracing { public Span error(Throwable throwable) { if (log.isDebugEnabled()) { - log.debug(String.format("Attaching error to Observation for Command %s", command)); + log.debug("Attaching error to Observation for Command %s".formatted(command)); } observation.error(throwable); @@ -283,7 +283,7 @@ public class MicrometerTracingAdapter implements Tracing { public void finish() { if (log.isDebugEnabled()) { - log.debug(String.format("Stopping Observation for Command %s", command)); + log.debug("Stopping Observation for Command %s".formatted(command)); } observation.stop(); diff --git a/src/main/java/org/springframework/data/redis/connection/stream/Consumer.java b/src/main/java/org/springframework/data/redis/connection/stream/Consumer.java index 621926665..0b43ba593 100644 --- a/src/main/java/org/springframework/data/redis/connection/stream/Consumer.java +++ b/src/main/java/org/springframework/data/redis/connection/stream/Consumer.java @@ -53,7 +53,7 @@ public class Consumer { @Override public String toString() { - return String.format("%s:%s", group, name); + return "%s:%s".formatted(group, name); } public String getGroup() { diff --git a/src/main/java/org/springframework/data/redis/connection/stream/StreamRecords.java b/src/main/java/org/springframework/data/redis/connection/stream/StreamRecords.java index bf9a34eec..90de8d0d4 100644 --- a/src/main/java/org/springframework/data/redis/connection/stream/StreamRecords.java +++ b/src/main/java/org/springframework/data/redis/connection/stream/StreamRecords.java @@ -216,7 +216,7 @@ public class StreamRecords { } else if (stream instanceof byte[]) { streamKey = ByteBuffer.wrap((byte[]) stream); } else { - throw new IllegalArgumentException(String.format("Stream key %s cannot be converted to byte buffer", stream)); + throw new IllegalArgumentException("Stream key %s cannot be converted to byte buffer".formatted(stream)); } return new ByteBufferMapBackedRecord(streamKey, id, value); diff --git a/src/main/java/org/springframework/data/redis/core/IndexWriter.java b/src/main/java/org/springframework/data/redis/core/IndexWriter.java index 3d3b048de..c1060b08d 100644 --- a/src/main/java/org/springframework/data/redis/core/IndexWriter.java +++ b/src/main/java/org/springframework/data/redis/core/IndexWriter.java @@ -238,7 +238,7 @@ class IndexWriter { connection.sAdd(createIndexKey(indexedData.getKeyspace(), key), indexKey); } else { throw new IllegalArgumentException( - String.format("Cannot write index data for unknown index type %s", indexedData.getClass())); + "Cannot write index data for unknown index type %s".formatted(indexedData.getClass())); } } @@ -292,10 +292,9 @@ class IndexWriter { return converter.getConversionService().convert(source, byte[].class); } - throw new InvalidDataAccessApiUsageException(String.format( - "Cannot convert %s to binary representation for index key generation; " - + "Are you missing a Converter; Did you register a non PathBasedRedisIndexDefinition that might apply to a complex type", - source.getClass())); + throw new InvalidDataAccessApiUsageException(("Cannot convert %s to binary representation for index key generation;" + + " Are you missing a Converter; Did you register a non PathBasedRedisIndexDefinition" + + " that might apply to a complex type").formatted(source.getClass())); } /** diff --git a/src/main/java/org/springframework/data/redis/core/RedisCommand.java b/src/main/java/org/springframework/data/redis/core/RedisCommand.java index 5621a216d..1959d2112 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisCommand.java +++ b/src/main/java/org/springframework/data/redis/core/RedisCommand.java @@ -377,16 +377,17 @@ public enum RedisCommand { if (requiresArguments()) { if (requiresExactNumberOfArguments()) { if (argumentCount != this.maxArgs) { - throw newIllegalArgumentException("%s command requires %d %s", name(), this.maxArgs, arguments(this.maxArgs)); + throw new IllegalArgumentException( + "%s command requires %d %s".formatted(name(), this.maxArgs, arguments(this.maxArgs))); } } if (argumentCount < this.minArgs) { - throw newIllegalArgumentException("%s command requires at least %d %s", name(), this.minArgs, - arguments(this.maxArgs)); + throw new IllegalArgumentException( + "%s command requires at least %d %s".formatted(name(), this.minArgs, arguments(this.maxArgs))); } if (this.maxArgs > 0 && argumentCount > this.maxArgs) { - throw newIllegalArgumentException("%s command requires at most %s %s", name(), this.maxArgs, - arguments(this.maxArgs)); + throw new IllegalArgumentException( + "%s command requires at most %s %s".formatted(name(), this.maxArgs, arguments(this.maxArgs))); } } } @@ -394,9 +395,4 @@ public enum RedisCommand { private String arguments(int count) { return count == 1 ? "argument" : "arguments"; } - - private IllegalArgumentException newIllegalArgumentException(String message, Object... arguments) { - return new IllegalArgumentException(String.format(message, arguments)); - } - } diff --git a/src/main/java/org/springframework/data/redis/core/RedisConnectionUtils.java b/src/main/java/org/springframework/data/redis/core/RedisConnectionUtils.java index 20e4954ae..767343557 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisConnectionUtils.java +++ b/src/main/java/org/springframework/data/redis/core/RedisConnectionUtils.java @@ -495,14 +495,14 @@ public abstract class RedisConnectionUtils { if (isPotentiallyThreadBoundCommand(commandToExecute)) { if (log.isDebugEnabled()) { - log.debug(String.format("Invoke '%s' on bound connection", method.getName())); + log.debug("Invoke '%s' on bound connection".formatted(method.getName())); } return invoke(method, obj, args); } if (log.isDebugEnabled()) { - log.debug(String.format("Invoke '%s' on unbound connection", method.getName())); + log.debug("Invoke '%s' on unbound connection".formatted(method.getName())); } RedisConnection connection = factory.getConnection(); diff --git a/src/main/java/org/springframework/data/redis/core/convert/BinaryConverters.java b/src/main/java/org/springframework/data/redis/core/convert/BinaryConverters.java index 402a68d7a..187c42e80 100644 --- a/src/main/java/org/springframework/data/redis/core/convert/BinaryConverters.java +++ b/src/main/java/org/springframework/data/redis/core/convert/BinaryConverters.java @@ -289,7 +289,7 @@ final class BinaryConverters { } catch (ParseException ignore) { } - throw new IllegalArgumentException(String.format("Cannot parse date out of %s", Arrays.toString(source))); + throw new IllegalArgumentException("Cannot parse date out of %s".formatted(Arrays.toString(source))); } } diff --git a/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java b/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java index e9e1a9f31..813c8c5a6 100644 --- a/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java +++ b/src/main/java/org/springframework/data/redis/core/convert/MappingRedisConverter.java @@ -540,8 +540,8 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { map.put(((Entry) pUpdate.getValue()).getKey(), ((Entry) pUpdate.getValue()).getValue()); } else { throw new MappingException( - String.format("Cannot set update value for map property '%s' to '%s'; Please use a Map or Map.Entry", - pUpdate.getPropertyPath(), pUpdate.getValue())); + ("Cannot set update value for map property '%s' to '%s';" + " Please use a Map or Map.Entry") + .formatted(pUpdate.getPropertyPath(), pUpdate.getValue())); } writeMap(entity.getKeySpace(), pUpdate.getPropertyPath(), targetProperty.getMapValueType(), map, sink); @@ -601,8 +601,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { } else { if (!ClassUtils.isAssignable(typeHint.getType(), value.getClass())) { - throw new MappingException( - String.format(INVALID_TYPE_ASSIGNMENT, value.getClass(), path, typeHint.getType())); + throw new MappingException(INVALID_TYPE_ASSIGNMENT.formatted(value.getClass(), path, typeHint.getType())); } writeToBucket(path, value, sink, typeHint.getType()); } @@ -751,7 +750,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { if (!ClassUtils.isAssignable(typeHint.getType(), value.getClass())) { throw new MappingException( - String.format(INVALID_TYPE_ASSIGNMENT, value.getClass(), currentPath, typeHint.getType())); + INVALID_TYPE_ASSIGNMENT.formatted(value.getClass(), currentPath, typeHint.getType())); } if (customConversions.hasCustomWriteTarget(value.getClass())) { @@ -794,7 +793,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { sink.getBucket().put(path, toBytes(value)); } else { throw new IllegalArgumentException( - String.format("Cannot convert value '%s' of type %s to bytes", value, value.getClass())); + "Cannot convert value '%s' of type %s to bytes".formatted(value, value.getClass())); } } } @@ -855,7 +854,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { if (!ClassUtils.isAssignable(mapValueType, entry.getValue().getClass())) { throw new MappingException( - String.format(INVALID_TYPE_ASSIGNMENT, entry.getValue().getClass(), currentPath, mapValueType)); + INVALID_TYPE_ASSIGNMENT.formatted(entry.getValue().getClass(), currentPath, mapValueType)); } if (customConversions.hasCustomWriteTarget(entry.getValue().getClass())) { @@ -945,8 +944,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { Matcher matcher = pattern.matcher(key); if (!matcher.find()) { - throw new IllegalArgumentException( - String.format("Cannot extract map value for key '%s' in path '%s'.", key, path)); + throw new IllegalArgumentException("Cannot extract map value for key '%s' in path '%s'".formatted(key, path)); } Object mapKey = matcher.group(2); @@ -1224,7 +1222,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { */ public static KeyspaceIdentifier of(String key) { - Assert.isTrue(isValid(key), String.format("Invalid key %s", key)); + Assert.isTrue(isValid(key), () -> "Invalid key %s".formatted(key)); boolean phantomKey = key.endsWith(PHANTOM_SUFFIX); int keyspaceEndIndex = key.indexOf(DELIMITER); @@ -1304,7 +1302,7 @@ public class MappingRedisConverter implements RedisConverter, InitializingBean { */ public static BinaryKeyspaceIdentifier of(byte[] key) { - Assert.isTrue(isValid(key), String.format("Invalid key %s", new String(key))); + Assert.isTrue(isValid(key), () -> "Invalid key %s".formatted(new String(key))); boolean phantomKey = ByteUtils.startsWith(key, PHANTOM_SUFFIX, key.length - PHANTOM_SUFFIX.length); diff --git a/src/main/java/org/springframework/data/redis/core/index/GeoIndexDefinition.java b/src/main/java/org/springframework/data/redis/core/index/GeoIndexDefinition.java index 00a7edc64..94157fef7 100644 --- a/src/main/java/org/springframework/data/redis/core/index/GeoIndexDefinition.java +++ b/src/main/java/org/springframework/data/redis/core/index/GeoIndexDefinition.java @@ -66,8 +66,8 @@ public class GeoIndexDefinition extends RedisIndexDefinition implements PathBase } throw new IllegalArgumentException( - String.format("Cannot convert %s to %s; GeoIndexed property needs to be of type Point or GeoLocation", - source.getClass(), Point.class)); + ("Cannot convert %s to %s; GeoIndexed property needs to be of type Point" + " or GeoLocation") + .formatted(source.getClass(), Point.class)); } } } diff --git a/src/main/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntity.java b/src/main/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntity.java index 14bbc8ee6..5b2f36333 100644 --- a/src/main/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntity.java +++ b/src/main/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntity.java @@ -84,16 +84,14 @@ public class BasicRedisPersistentEntity extends BasicKeyValuePersistentEntity boolean newIdPropertyIsExplicit = property.isAnnotationPresent(Id.class); if (currentIdPropertyIsExplicit && newIdPropertyIsExplicit) { - throw new MappingException(String.format( - "Attempt to add explicit id property %s but already have an property %s registered " - + "as explicit id; Check your mapping configuration", - property.getField(), currentIdProperty.getField())); + throw new MappingException(("Attempt to add explicit id property %s but already have a property %s" + + " registered as explicit id; Check your mapping configuration") + .formatted(property.getField(), currentIdProperty.getField())); } if (!currentIdPropertyIsExplicit && !newIdPropertyIsExplicit) { - throw new MappingException( - String.format("Attempt to add id property %s but already have an property %s registered " - + "as id; Check your mapping configuration", property.getField(), currentIdProperty.getField())); + throw new MappingException(("Attempt to add id property %s but already have a property %s registered as id;" + + " Check your mapping configuration").formatted(property.getField(), currentIdProperty.getField())); } if (newIdPropertyIsExplicit) { diff --git a/src/main/java/org/springframework/data/redis/core/mapping/RedisMappingContext.java b/src/main/java/org/springframework/data/redis/core/mapping/RedisMappingContext.java index e623311ee..0907cab4f 100644 --- a/src/main/java/org/springframework/data/redis/core/mapping/RedisMappingContext.java +++ b/src/main/java/org/springframework/data/redis/core/mapping/RedisMappingContext.java @@ -241,17 +241,15 @@ public class RedisMappingContext extends KeyValueMappingContext implements HashMapper { return result; } catch (Exception ex) { - throw new IllegalArgumentException(String.format("Cannot describe object %s", object), ex); + throw new IllegalArgumentException("Cannot describe object %s".formatted(object), ex); } } } diff --git a/src/main/java/org/springframework/data/redis/hash/Jackson2HashMapper.java b/src/main/java/org/springframework/data/redis/hash/Jackson2HashMapper.java index 7b5ca2054..b1eb83873 100644 --- a/src/main/java/org/springframework/data/redis/hash/Jackson2HashMapper.java +++ b/src/main/java/org/springframework/data/redis/hash/Jackson2HashMapper.java @@ -412,8 +412,7 @@ public class Jackson2HashMapper implements HashMapper { resultMap.put(propertyPrefix, next.binaryValue()); } catch (IOException ex) { - String message = String.format("Cannot read binary value of '%s'", propertyPrefix); - throw new IllegalStateException(message, ex); + throw new IllegalStateException("Cannot read binary value '%s'".formatted(propertyPrefix), ex); } break; diff --git a/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java b/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java index 172a3f825..63b111528 100644 --- a/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java +++ b/src/main/java/org/springframework/data/redis/listener/RedisMessageListenerContainer.java @@ -657,14 +657,14 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab Collection collection = resolveMessageListeners(this.channelMapping, serializedTopic); collection.add(listener); channels.add(serializedTopic.getArray()); - logTrace(() -> String.format("Adding listener '%s' on channel '%s'", listener, topic.getTopic())); + logTrace(() -> "Adding listener '%s' on channel '%s'".formatted(listener, topic.getTopic())); } else if (topic instanceof PatternTopic) { Collection collection = resolveMessageListeners(this.patternMapping, serializedTopic); collection.add(listener); patterns.add(serializedTopic.getArray()); - logTrace(() -> String.format("Adding listener '%s' for pattern '%s'", listener, topic.getTopic())); + logTrace(() -> "Adding listener '%s' for pattern '%s'".formatted(listener, topic.getTopic())); } else { - throw new IllegalArgumentException(String.format("Unknown topic type '%s'", topic.getClass())); + throw new IllegalArgumentException("Unknown topic type '%s'".formatted(topic.getClass())); } } boolean wasListening = isListening(); @@ -748,12 +748,12 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab if (topic instanceof ChannelTopic) { remove(listener, topic, holder, channelMapping, channelsToRemove); - logTrace(() -> String.format("Removing listener '%s' from channel '%s'", listener, topic.getTopic())); + logTrace(() -> "Removing listener '%s' from channel '%s'".formatted(listener, topic.getTopic())); } else if (topic instanceof PatternTopic) { remove(listener, topic, holder, patternMapping, patternsToRemove); - logTrace(() -> String.format("Removing listener '%s' from pattern '%s'", listener, topic.getTopic())); + logTrace(() -> "Removing listener '%s' from pattern '%s'".formatted(listener, topic.getTopic())); } } @@ -874,9 +874,8 @@ public class RedisMessageListenerContainer implements InitializingBean, Disposab long recoveryInterval = backOffExecution.nextBackOff(); if (recoveryInterval != BackOffExecution.STOP) { - String message = String.format("Connection failure occurred: %s; Restarting subscription task after %s ms", - cause, recoveryInterval); - logger.error(message, cause); + logger.error("Connection failure occurred: %s; Restarting subscription task after %s ms".formatted(cause, + recoveryInterval), cause); } return recoveryInterval; diff --git a/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java b/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java index 2152b4fad..ed9c67ae2 100644 --- a/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java +++ b/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java @@ -375,13 +375,12 @@ public class MessageListenerAdapter implements InitializingBean, MessageListener if (targetEx instanceof DataAccessException dataAccessException) { throw dataAccessException; } else { - String message = String.format("Listener method '%s' threw exception", methodName); - throw new RedisListenerExecutionFailedException(message, targetEx); + throw new RedisListenerExecutionFailedException("Listener method '%s' threw exception".formatted(methodName), + targetEx); } } catch (Throwable ex) { - String message = String.format("Failed to invoke target method '%s' with arguments %s", methodName, - ObjectUtils.nullSafeToString(arguments)); - throw new RedisListenerExecutionFailedException(message, ex); + throw new RedisListenerExecutionFailedException("Failed to invoke target method '%s' with arguments %s" + .formatted(methodName, ObjectUtils.nullSafeToString(arguments)), ex); } } diff --git a/src/main/java/org/springframework/data/redis/repository/cdi/CdiBean.java b/src/main/java/org/springframework/data/redis/repository/cdi/CdiBean.java index bdb9248f6..6a12dd3ea 100644 --- a/src/main/java/org/springframework/data/redis/repository/cdi/CdiBean.java +++ b/src/main/java/org/springframework/data/redis/repository/cdi/CdiBean.java @@ -149,8 +149,7 @@ public abstract class CdiBean implements Bean, PassivationCapable { public void destroy(T instance, CreationalContext creationalContext) { if (log.isDebugEnabled()) { - log.debug(String.format("Destroying bean instance %s for repository type '%s'.", instance.toString(), - beanClass.getName())); + log.debug("Destroying bean instance %s for repository type '%s'".formatted(instance, beanClass.getName())); } creationalContext.release(); @@ -206,7 +205,7 @@ public abstract class CdiBean implements Bean, PassivationCapable { @Override public String toString() { - return String.format("CdiBean: type='%s', qualifiers=%s", beanClass.getName(), qualifiers.toString()); + return "CdiBean: type='%s', qualifiers=%s".formatted(beanClass.getName(), qualifiers.toString()); } } diff --git a/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryExtension.java b/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryExtension.java index c445925f6..63d88805d 100644 --- a/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryExtension.java +++ b/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryExtension.java @@ -80,7 +80,7 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { if (beanType instanceof Class && RedisKeyValueTemplate.class.isAssignableFrom((Class) beanType)) { if (log.isDebugEnabled()) { - log.debug(String.format("Discovered %s with qualifiers %s.", RedisKeyValueTemplate.class.getName(), + log.debug("Discovered %s with qualifiers %s.".formatted(RedisKeyValueTemplate.class.getName(), bean.getQualifiers())); } @@ -90,7 +90,7 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { if (beanType instanceof Class && RedisKeyValueAdapter.class.isAssignableFrom((Class) beanType)) { if (log.isDebugEnabled()) { - log.debug(String.format("Discovered %s with qualifiers %s.", RedisKeyValueAdapter.class.getName(), + log.debug("Discovered %s with qualifiers %s.".formatted(RedisKeyValueAdapter.class.getName(), bean.getQualifiers())); } @@ -100,7 +100,8 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { if (beanType instanceof Class && RedisOperations.class.isAssignableFrom((Class) beanType)) { if (log.isDebugEnabled()) { - log.debug(String.format("Discovered %s with qualifiers %s.", RedisOperations.class.getName(), + log.debug( + "Discovered %s with qualifiers %s.".formatted(RedisOperations.class.getName(), bean.getQualifiers())); } @@ -123,7 +124,7 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { CdiRepositoryBean repositoryBean = createRepositoryBean(repositoryType, qualifiers, beanManager); if (log.isInfoEnabled()) { - log.info(String.format("Registering bean for %s with qualifiers %s.", repositoryType.getName(), qualifiers)); + log.info("Registering bean for %s with qualifiers %s.".formatted(repositoryType.getName(), qualifiers)); } // Register the bean to the container. @@ -148,7 +149,7 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { if (!redisKeyValueAdapters.containsKey(qualifiers)) { if (log.isInfoEnabled()) { - log.info(String.format("Registering bean for %s with qualifiers %s.", RedisKeyValueAdapter.class.getName(), + log.info("Registering bean for %s with qualifiers %s.".formatted(RedisKeyValueAdapter.class.getName(), qualifiers)); } RedisKeyValueAdapterBean redisKeyValueAdapterBean = createRedisKeyValueAdapterBean(qualifiers, beanManager); @@ -158,7 +159,7 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { if (!redisKeyValueTemplates.containsKey(qualifiers)) { if (log.isInfoEnabled()) { - log.info(String.format("Registering bean for %s with qualifiers %s.", RedisKeyValueTemplate.class.getName(), + log.info("Registering bean for %s with qualifiers %s.".formatted(RedisKeyValueTemplate.class.getName(), qualifiers)); } @@ -186,8 +187,8 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { Bean redisKeyValueTemplate = this.redisKeyValueTemplates.get(qualifiers); if (redisKeyValueTemplate == null) { - throw new UnsatisfiedResolutionException(String.format("Unable to resolve a bean for '%s' with qualifiers %s.", - RedisKeyValueTemplate.class.getName(), qualifiers)); + throw new UnsatisfiedResolutionException("Unable to resolve a bean for '%s' with qualifiers %s" + .formatted(RedisKeyValueTemplate.class.getName(), qualifiers)); } // Construct and return the repository bean. @@ -208,8 +209,8 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { Bean> redisOperationsBean = this.redisOperations.get(qualifiers); if (redisOperationsBean == null) { - throw new UnsatisfiedResolutionException(String.format("Unable to resolve a bean for '%s' with qualifiers %s.", - RedisOperations.class.getName(), qualifiers)); + throw new UnsatisfiedResolutionException("Unable to resolve a bean for '%s' with qualifiers %s." + .formatted(RedisOperations.class.getName(), qualifiers)); } // Construct and return the repository bean. @@ -230,8 +231,8 @@ public class RedisRepositoryExtension extends CdiRepositoryExtensionSupport { Bean redisKeyValueAdapterBean = this.redisKeyValueAdapters.get(qualifiers); if (redisKeyValueAdapterBean == null) { - throw new UnsatisfiedResolutionException(String.format("Unable to resolve a bean for '%s' with qualifiers %s.", - RedisKeyValueAdapter.class.getName(), qualifiers)); + throw new UnsatisfiedResolutionException("Unable to resolve a bean for '%s' with qualifiers %s" + .formatted(RedisKeyValueAdapter.class.getName(), qualifiers)); } // Construct and return the repository bean. diff --git a/src/main/java/org/springframework/data/redis/repository/core/MappingRedisEntityInformation.java b/src/main/java/org/springframework/data/redis/repository/core/MappingRedisEntityInformation.java index c05d61f12..3af170b23 100644 --- a/src/main/java/org/springframework/data/redis/repository/core/MappingRedisEntityInformation.java +++ b/src/main/java/org/springframework/data/redis/repository/core/MappingRedisEntityInformation.java @@ -40,10 +40,9 @@ public class MappingRedisEntityInformation extends PersistentEntityInform super(entity); if (!entity.hasIdProperty()) { - throw new MappingException( - String.format("Entity %s requires to have an explicit id field; Did you forget to provide one using @Id", - entity.getName())); + ("Entity %s requires to have an explicit id field;" + " Did you forget to provide one using @Id") + .formatted(entity.getName())); } } } diff --git a/src/main/java/org/springframework/data/redis/repository/query/ExampleQueryMapper.java b/src/main/java/org/springframework/data/redis/repository/query/ExampleQueryMapper.java index fe82d0327..a5b0c7644 100644 --- a/src/main/java/org/springframework/data/redis/repository/query/ExampleQueryMapper.java +++ b/src/main/java/org/springframework/data/redis/repository/query/ExampleQueryMapper.java @@ -139,8 +139,8 @@ public class ExampleQueryMapper { if (!SUPPORTED_MATCHERS.contains(stringMatcher)) { throw new InvalidDataAccessApiUsageException( - String.format("Redis Query-by-Example does not support string matcher %s; Supported matchers are: %s.", - stringMatcher, SUPPORTED_MATCHERS)); + ("Redis Query-by-Example does not support string matcher %s;" + " Supported matchers are: %s.") + .formatted(stringMatcher, SUPPORTED_MATCHERS)); } if (exampleSpecAccessor.hasPropertySpecifier(path)) { diff --git a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java index 0479654a8..c7541ac8e 100644 --- a/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java +++ b/src/main/java/org/springframework/data/redis/repository/query/RedisQueryCreator.java @@ -61,10 +61,8 @@ public class RedisQueryCreator extends AbstractQueryCreator sink.sismember(part.getProperty().toDotPath(), true); case FALSE -> sink.sismember(part.getProperty().toDotPath(), false); case WITHIN, NEAR -> sink.near(getNearPath(part, iterator)); - default -> { - String message = String.format("%s is not supported for Redis query derivation", part.getType()); - throw new IllegalArgumentException(message); - } + default -> + throw new IllegalArgumentException("%s is not supported for Redis query derivation".formatted(part.getType())); } return sink; @@ -111,8 +109,8 @@ public class RedisQueryCreator extends AbstractQueryCreator collection) { diff --git a/src/main/java/org/springframework/data/redis/serializer/DefaultRedisElementWriter.java b/src/main/java/org/springframework/data/redis/serializer/DefaultRedisElementWriter.java index 43fa91fa2..38bfc1924 100644 --- a/src/main/java/org/springframework/data/redis/serializer/DefaultRedisElementWriter.java +++ b/src/main/java/org/springframework/data/redis/serializer/DefaultRedisElementWriter.java @@ -18,6 +18,7 @@ package org.springframework.data.redis.serializer; import java.nio.ByteBuffer; import org.springframework.lang.Nullable; +import org.springframework.util.ObjectUtils; /** * Default implementation of {@link RedisElementWriter}. @@ -38,7 +39,8 @@ class DefaultRedisElementWriter implements RedisElementWriter { public ByteBuffer write(@Nullable T value) { if (serializer != null && (value == null || serializer.canSerialize(value.getClass()))) { - return ByteBuffer.wrap(serializer.serialize(value)); + byte[] serializedValue = serializer.serialize(value); + return serializedValue != null ? ByteBuffer.wrap(serializedValue) : ByteBuffer.wrap(new byte[0]); } if (value instanceof byte[]) { @@ -50,6 +52,6 @@ class DefaultRedisElementWriter implements RedisElementWriter { } throw new IllegalStateException( - String.format("Cannot serialize value of type %s without a serializer", value.getClass())); + "Cannot serialize value of type %s without a serializer".formatted(ObjectUtils.nullSafeClassName(value))); } } diff --git a/src/main/java/org/springframework/data/redis/serializer/GenericJackson2JsonRedisSerializer.java b/src/main/java/org/springframework/data/redis/serializer/GenericJackson2JsonRedisSerializer.java index ae968d614..7ecc89d18 100644 --- a/src/main/java/org/springframework/data/redis/serializer/GenericJackson2JsonRedisSerializer.java +++ b/src/main/java/org/springframework/data/redis/serializer/GenericJackson2JsonRedisSerializer.java @@ -266,8 +266,7 @@ public class GenericJackson2JsonRedisSerializer implements RedisSerializer> implements StreamReceiver public Flux receive(StreamOffset streamOffset) { if (logger.isDebugEnabled()) { - logger.debug(String.format("receive(%s)", streamOffset)); + logger.debug("receive(%s)".formatted(streamOffset)); } RedisSerializationContext.SerializationPair keySerializer = template.getSerializationContext() @@ -125,11 +125,10 @@ class DefaultStreamReceiver> implements StreamReceiver } @Override - @SuppressWarnings("unchecked") public Flux receiveAutoAck(Consumer consumer, StreamOffset streamOffset) { if (logger.isDebugEnabled()) { - logger.debug(String.format("receiveAutoAck(%s, %s)", consumer, streamOffset)); + logger.debug("receiveAutoAck(%s, %s)".formatted(consumer, streamOffset)); } Function> readFunction = getConsumeReadFunction(streamOffset.getKey(), consumer, @@ -146,11 +145,10 @@ class DefaultStreamReceiver> implements StreamReceiver } @Override - @SuppressWarnings("unchecked") public Flux receive(Consumer consumer, StreamOffset streamOffset) { if (logger.isDebugEnabled()) { - logger.debug(String.format("receive(%s, %s)", consumer, streamOffset)); + logger.debug("receive(%s, %s)".formatted(consumer, streamOffset)); } Function> readFunction = getConsumeReadFunction(streamOffset.getKey(), consumer, @@ -229,7 +227,7 @@ class DefaultStreamReceiver> implements StreamReceiver sink.onRequest(toAdd -> { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onRequest(%d)", key, toAdd)); + logger.debug("[stream: %s] onRequest(%d)".formatted(key, toAdd)); } if (pollState.isSubscriptionActive()) { @@ -251,7 +249,7 @@ class DefaultStreamReceiver> implements StreamReceiver } } else { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onRequest(%d): Dropping, subscription canceled", key, toAdd)); + logger.debug("[stream: %s] onRequest(%d): Dropping, subscription canceled".formatted(key, toAdd)); } } }); @@ -263,25 +261,25 @@ class DefaultStreamReceiver> implements StreamReceiver private void scheduleIfRequired() { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] scheduleIfRequired()", key)); + logger.debug("[stream: %s] scheduleIfRequired()".formatted(key)); } if (pollState.isScheduled()) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] scheduleIfRequired(): Already scheduled", key)); + logger.debug("[stream: %s] scheduleIfRequired(): Already scheduled".formatted(key)); } return; } if (!pollState.isSubscriptionActive()) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] scheduleIfRequired(): Subscription cancelled", key)); + logger.debug("[stream: %s] scheduleIfRequired(): Subscription cancelled".formatted(key)); } return; } if (pollState.getRequested() > 0 && !overflow.isEmpty()) { if (logger.isDebugEnabled()) { - logger.info(String.format("[stream: %s] scheduleIfRequired(): Requested: %d Emit from buffer", key, + logger.info("[stream: %s] scheduleIfRequired(): Requested: %d Emit from buffer".formatted(key, pollState.getRequested())); } emitBuffer(); @@ -290,8 +288,8 @@ class DefaultStreamReceiver> implements StreamReceiver if (pollState.getRequested() == 0) { if (logger.isDebugEnabled()) { - logger.debug(String - .format("[stream: %s] scheduleIfRequired(): Subscriber has no demand; Suspending subscription", key)); + logger.debug( + "[stream: %s] scheduleIfRequired(): Subscriber has no demand; Suspending subscription".formatted(key)); } return; } @@ -303,14 +301,14 @@ class DefaultStreamReceiver> implements StreamReceiver if (pollState.activateSchedule()) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] scheduleIfRequired(): Activating subscription", key)); + logger.debug("[stream: %s] scheduleIfRequired(): Activating subscription".formatted(key)); } ReadOffset readOffset = pollState.getCurrentReadOffset(); if (logger.isDebugEnabled()) { logger.debug( - String.format("[stream: %s] scheduleIfRequired(): Activating subscription, offset %s", key, readOffset)); + "[stream: %s] scheduleIfRequired(): Activating subscription, offset %s".formatted(key, readOffset)); } Flux poll = readFunction.apply(readOffset) @@ -319,7 +317,7 @@ class DefaultStreamReceiver> implements StreamReceiver poll.map(it -> { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onStreamMessage(%s)", key, it)); + logger.debug("[stream: %s] onStreamMessage(%s)".formatted(key, it)); } pollState.updateReadOffset(it.getId().getValue()); @@ -357,7 +355,7 @@ class DefaultStreamReceiver> implements StreamReceiver public void onComplete() { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onComplete()", key)); + logger.debug("[stream: %s] onComplete()".formatted(key)); } pollState.scheduleCompleted(); @@ -381,20 +379,20 @@ class DefaultStreamReceiver> implements StreamReceiver if (requested == Long.MAX_VALUE) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onStreamMessage(%s): Emitting item, fast-path", key, message)); + logger.debug("[stream: %s] onStreamMessage(%s): Emitting item, fast-path".formatted(key, message)); } sink.next(message); } else { if (pollState.decrementRequested()) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onStreamMessage(%s): Emitting item, slow-path", key, message)); + logger.debug("[stream: %s] onStreamMessage(%s): Emitting item, slow-path".formatted(key, message)); } sink.next(message); } else { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onStreamMessage(%s): Buffering overflow", key, message)); + logger.debug("[stream: %s] onStreamMessage(%s): Buffering overflow".formatted(key, message)); } overflow.offer(message); } @@ -403,7 +401,7 @@ class DefaultStreamReceiver> implements StreamReceiver } else { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onStreamMessage(%s): Buffering overflow", key, message)); + logger.debug("[stream: %s] onStreamMessage(%s): Buffering overflow".formatted(key, message)); } overflow.offer(message); } @@ -412,7 +410,7 @@ class DefaultStreamReceiver> implements StreamReceiver private void onStreamError(Throwable t) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] onStreamError(%s)", key, t)); + logger.debug("[stream: %s] onStreamError(%s)".formatted(key, t)); } pollState.cancel(); @@ -435,14 +433,13 @@ class DefaultStreamReceiver> implements StreamReceiver if (message == null) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] emitBuffer(): emission missed", key)); + logger.debug("[stream: %s] emitBuffer(): emission missed".formatted(key)); } break; } if (logger.isDebugEnabled()) { - logger.debug( - String.format("[stream: %s] emitBuffer(%s): Emitting item from buffer, fast-path", key, message)); + logger.debug("[stream: %s] emitBuffer(%s): Emitting item from buffer, fast-path".formatted(key, message)); } sink.next(message); @@ -454,15 +451,14 @@ class DefaultStreamReceiver> implements StreamReceiver if (message == null) { if (logger.isDebugEnabled()) { - logger.debug(String.format("[stream: %s] emitBuffer(): emission missed", key)); + logger.debug("[stream: %s] emitBuffer(): emission missed".formatted(key)); } pollState.incrementRequested(); break; } if (logger.isDebugEnabled()) { - logger.debug( - String.format("[stream: %s] emitBuffer(%s): Emitting item from buffer, slow-path", key, message)); + logger.debug("[stream: %s] emitBuffer(%s): Emitting item from buffer, slow-path".formatted(key, message)); } sink.next(message); diff --git a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java index eb6c93014..9c1f70df7 100644 --- a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java +++ b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicDouble.java @@ -160,11 +160,12 @@ public class RedisAtomicDouble extends Number implements Serializable, BoundKeyO public double get() { Double value = operations.get(key); + if (value != null) { return value; } - throw new DataRetrievalFailureException(String.format("The key '%s' seems to no longer exist", key)); + throw new DataRetrievalFailureException("The key '%s' seems to no longer exist".formatted(key)); } /** diff --git a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java index 04f43f8d7..f8e092c0b 100644 --- a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java +++ b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicInteger.java @@ -160,11 +160,12 @@ public class RedisAtomicInteger extends Number implements Serializable, BoundKey public int get() { Integer value = operations.get(key); + if (value != null) { return value; } - throw new DataRetrievalFailureException(String.format("The key '%s' seems to no longer exist", key)); + throw new DataRetrievalFailureException("The key '%s' seems to no longer exist".formatted(key)); } /** diff --git a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java index f661d5dc3..597b12627 100644 --- a/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java +++ b/src/main/java/org/springframework/data/redis/support/atomic/RedisAtomicLong.java @@ -161,11 +161,12 @@ public class RedisAtomicLong extends Number implements Serializable, BoundKeyOpe public long get() { Long value = operations.get(key); + if (value != null) { return value; } - throw new DataRetrievalFailureException(String.format("The key '%s' seems to no longer exist", key)); + throw new DataRetrievalFailureException("The key '%s' seems to no longer exist".formatted(key)); } /** diff --git a/src/main/java/org/springframework/data/redis/support/collections/AbstractRedisCollection.java b/src/main/java/org/springframework/data/redis/support/collections/AbstractRedisCollection.java index d8a2af95a..842905a30 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/AbstractRedisCollection.java +++ b/src/main/java/org/springframework/data/redis/support/collections/AbstractRedisCollection.java @@ -166,13 +166,6 @@ public abstract class AbstractRedisCollection extends AbstractCollection i @Override public String toString() { - - StringBuilder sb = new StringBuilder(); - - sb.append(String.format("%s for key:", getClass().getSimpleName())); - sb.append(getKey()); - - return sb.toString(); + return "%s for key: %s".formatted(getClass().getSimpleName(), getKey()); } - } diff --git a/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java b/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java index 8451a80dd..581a9920d 100644 --- a/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java +++ b/src/main/java/org/springframework/data/redis/support/collections/ReversedRedisListView.java @@ -639,8 +639,9 @@ class ReversedRedisListView implements RedisList { DescendingListIterator(int size, int position) { if (position < 0 || position > size) { - String message = String.format("Position [%d] is out of bounds: [0, %d]", position, size); - throw new IndexOutOfBoundsException(message); + throw new IndexOutOfBoundsException( + ("Position [%d] is out of bounds;" + " position must be greater than equal to 0 and less than size %d") + .formatted(position, size)); } this.it = base.listIterator(size - position); diff --git a/src/main/java/org/springframework/data/redis/util/RedisAssertions.java b/src/main/java/org/springframework/data/redis/util/RedisAssertions.java index 34e5bfede..2b0272de2 100644 --- a/src/main/java/org/springframework/data/redis/util/RedisAssertions.java +++ b/src/main/java/org/springframework/data/redis/util/RedisAssertions.java @@ -40,7 +40,7 @@ public abstract class RedisAssertions { * @see #requireNonNull(Object, Supplier) */ public static T requireNonNull(@Nullable T target, String message, Object... arguments) { - return requireNonNull(target, () -> String.format(message, arguments)); + return requireNonNull(target, () -> message.formatted(arguments)); } /** @@ -88,7 +88,7 @@ public abstract class RedisAssertions { * @see #requireNonNull(Object, Supplier) */ public static T requireState(@Nullable T target, String message, Object... arguments) { - return requireState(target, () -> String.format(message, arguments)); + return requireState(target, () -> message.formatted(arguments)); } /** diff --git a/src/test/java/org/springframework/data/redis/SettingsUtils.java b/src/test/java/org/springframework/data/redis/SettingsUtils.java index cadeca6ff..107c61889 100644 --- a/src/test/java/org/springframework/data/redis/SettingsUtils.java +++ b/src/test/java/org/springframework/data/redis/SettingsUtils.java @@ -18,6 +18,7 @@ package org.springframework.data.redis; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Properties; import org.springframework.data.redis.connection.RedisClusterConfiguration; @@ -114,9 +115,11 @@ public abstract class SettingsUtils { * @return a new {@link RedisSentinelConfiguration} initialized with test endpoint settings. */ public static RedisSentinelConfiguration sentinelConfiguration() { - return new RedisSentinelConfiguration(getSentinelMaster(), - new HashSet<>(Arrays.asList(String.format("%s:%d", getHost(), getSentinelPort()), - String.format("%s:%d", getHost(), getSentinelPort() + 1)))); + + List sentinelHostPorts = List.of("%s:%d".formatted(getHost(), getSentinelPort()), + "%s:%d".formatted(getHost(), getSentinelPort() + 1)); + + return new RedisSentinelConfiguration(getSentinelMaster(), new HashSet<>(sentinelHostPorts)); } /** @@ -125,8 +128,7 @@ public abstract class SettingsUtils { * @return a new {@link RedisClusterConfiguration} initialized with test endpoint settings. */ public static RedisClusterConfiguration clusterConfiguration() { - return new RedisClusterConfiguration( - Collections.singletonList(String.format("%s:%d", getHost(), getClusterPort()))); + return new RedisClusterConfiguration(List.of("%s:%d".formatted(getHost(), getClusterPort()))); } /** diff --git a/src/test/java/org/springframework/data/redis/connection/ClusterSlotHashUtilsTests.java b/src/test/java/org/springframework/data/redis/connection/ClusterSlotHashUtilsTests.java index f48d44ce8..ed0f1ef8d 100644 --- a/src/test/java/org/springframework/data/redis/connection/ClusterSlotHashUtilsTests.java +++ b/src/test/java/org/springframework/data/redis/connection/ClusterSlotHashUtilsTests.java @@ -60,7 +60,7 @@ public class ClusterSlotHashUtilsTests { Long serverSlot = jedis.clusterKeySlot(key); assertThat(slot) - .as(String.format("Expected slot for key '%s' to be %s but server calculated %s.", key, slot, serverSlot)) + .describedAs("Expected slot for key '%s' to be %s but server calculated %s", key, slot, serverSlot) .isEqualTo(serverSlot.intValue()); } diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionIntegrationTests.java index 21446b564..119b50766 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionIntegrationTests.java @@ -404,8 +404,8 @@ public class JedisConnectionIntegrationTests extends AbstractConnectionIntegrati long ttl = connection.pTtl("pexpireKey"); assertThat(millis - ttl < 20L) - .as(String.format("difference between millis=%s and ttl=%s should not be greater than 20ms but is %s", millis, - ttl, millis - ttl)) + .describedAs("difference between millis=%s and ttl=%s should not be greater than 20ms but is %s", + millis, ttl, millis - ttl) .isTrue(); } diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java index 3c91253f2..81a811a03 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryTests.java @@ -402,7 +402,7 @@ class LettuceConnectionFactoryTests { @Test // DATAREDIS-762, DATAREDIS-869 void factoryUsesElastiCacheMasterReplicaConnections() { - assumeTrue(String.format("No replicas connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()), + assumeTrue("No replicas connected to %s:%d".formatted(SettingsUtils.getHost(), SettingsUtils.getPort()), connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0); LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.REPLICA) @@ -429,7 +429,7 @@ class LettuceConnectionFactoryTests { @Test // DATAREDIS-1093 void pubSubDoesNotSupportMasterReplicaConnections() { - assumeTrue(String.format("No replicas connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()), + assumeTrue("No replicas connected to %s:%d".formatted(SettingsUtils.getHost(), SettingsUtils.getPort()), connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0); RedisStaticMasterReplicaConfiguration elastiCache = new RedisStaticMasterReplicaConfiguration( @@ -451,7 +451,7 @@ class LettuceConnectionFactoryTests { @Test // DATAREDIS-762, DATAREDIS-869 void factoryUsesElastiCacheMasterWithoutMaster() { - assumeTrue(String.format("No replicas connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()), + assumeTrue("No replicas connected to %s:%d.".formatted(SettingsUtils.getHost(), SettingsUtils.getPort()), connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0); LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.MASTER) @@ -481,7 +481,7 @@ class LettuceConnectionFactoryTests { @Test // DATAREDIS-580, DATAREDIS-869 void factoryUsesMasterReplicaConnections() { - assumeTrue(String.format("No replicas connected to %s:%s.", SettingsUtils.getHost(), SettingsUtils.getPort()), + assumeTrue("No replicas connected to %s:%d".formatted(SettingsUtils.getHost(), SettingsUtils.getPort()), connection.info("replication").getProperty("connected_slaves", "0").compareTo("0") > 0); LettuceClientConfiguration configuration = LettuceTestClientConfiguration.builder().readFrom(ReadFrom.SLAVE) @@ -489,6 +489,7 @@ class LettuceConnectionFactoryTests { LettuceConnectionFactory factory = new LettuceConnectionFactory(SettingsUtils.standaloneConfiguration(), configuration); + factory.start(); RedisConnection connection = factory.getConnection(); diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveScriptingCommandsIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveScriptingCommandsIntegrationTests.java index 75a0b75a3..0a16832f6 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveScriptingCommandsIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveScriptingCommandsIntegrationTests.java @@ -111,7 +111,7 @@ public class LettuceReactiveScriptingCommandsIntegrationTests extends LettuceRea @ParameterizedRedisTest // DATAREDIS-683 void evalShouldReturnStatus() { - ByteBuffer script = wrap(String.format("return redis.call('set','%s','ghk')", SAME_SLOT_KEY_1)); + ByteBuffer script = wrap("return redis.call('set','%s','ghk')".formatted(SAME_SLOT_KEY_1)); connection.scriptingCommands().eval(script, ReturnType.STATUS, 1, SAME_SLOT_KEY_1_BBUFFER.duplicate()) .as(StepVerifier::create) // diff --git a/src/test/java/org/springframework/data/redis/core/RedisKeyValueAdapterTests.java b/src/test/java/org/springframework/data/redis/core/RedisKeyValueAdapterTests.java index 65e57819f..94ccf69b2 100644 --- a/src/test/java/org/springframework/data/redis/core/RedisKeyValueAdapterTests.java +++ b/src/test/java/org/springframework/data/redis/core/RedisKeyValueAdapterTests.java @@ -821,7 +821,7 @@ public class RedisKeyValueAdapterTests { while (template.hasKey(key)) { if (waitedMs > limitMs) { - throw new TimeoutException(String.format("Key '%s' after %d %s still present", key, timeout, timeUnit)); + throw new TimeoutException("Key '%s' after %d %s still present".formatted(key, timeout, timeUnit)); } Thread.sleep(sleepMs); diff --git a/src/test/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntityUnitTests.java b/src/test/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntityUnitTests.java index f26bbf93d..f2d653210 100644 --- a/src/test/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntityUnitTests.java +++ b/src/test/java/org/springframework/data/redis/core/mapping/BasicRedisPersistentEntityUnitTests.java @@ -34,7 +34,6 @@ import org.springframework.data.util.TypeInformation; * @author Christoph Strobl * @author Mark Paluch * @param - * @param */ @ExtendWith(MockitoExtension.class) class BasicRedisPersistentEntityUnitTests { @@ -66,7 +65,8 @@ class BasicRedisPersistentEntityUnitTests { entity.addPersistentProperty(property1); assertThatExceptionOfType(MappingException.class).isThrownBy(() -> entity.addPersistentProperty(property2)) - .withMessageContaining("Attempt to add id property").withMessageContaining("but already have an property"); + .withMessageContaining("Attempt to add id property") + .withMessageContaining("but already have a property"); } @Test // DATAREDIS-425 @@ -84,7 +84,7 @@ class BasicRedisPersistentEntityUnitTests { entity.addPersistentProperty(property1); assertThatExceptionOfType(MappingException.class).isThrownBy(() -> entity.addPersistentProperty(property2)) .withMessageContaining("Attempt to add explicit id property") - .withMessageContaining("but already have an property"); + .withMessageContaining("but already have a property"); } @Test // DATAREDIS-425 diff --git a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisAvailableCondition.java b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisAvailableCondition.java index f1c73953d..88ac8dcbc 100644 --- a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisAvailableCondition.java +++ b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisAvailableCondition.java @@ -57,10 +57,10 @@ class EnabledOnRedisAvailableCondition implements ExecutionCondition { socket.connect(new InetSocketAddress(SettingsUtils.getHost(), annotation.value()), 100); - return enabled(String.format("Connection successful to Redis at %s:%d", SettingsUtils.getHost(), + return enabled("Connection successful to Redis at %s:%d".formatted(SettingsUtils.getHost(), annotation.value())); } catch (IOException ex) { - return disabled(String.format("Cannot connect to Redis at %s:%d (%s)", SettingsUtils.getHost(), + return disabled("Cannot connect to Redis at %s:%d (%s)".formatted(SettingsUtils.getHost(), annotation.value(), ex)); } } diff --git a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisClusterCondition.java b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisClusterCondition.java index f67cf4d3f..dba3c6071 100644 --- a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisClusterCondition.java +++ b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisClusterCondition.java @@ -48,11 +48,11 @@ class EnabledOnRedisClusterCondition implements ExecutionCondition { } if (RedisDetector.isClusterAvailable()) { - return enabled(String.format("Connection successful to Redis Cluster at %s:%d", SettingsUtils.getHost(), + return enabled("Connection successful to Redis Cluster at %s:%d".formatted(SettingsUtils.getHost(), SettingsUtils.getClusterPort())); } - return disabled(String.format("Cannot connect to Redis Cluster at %s:%d", SettingsUtils.getHost(), + return disabled("Cannot connect to Redis Cluster at %s:%d".formatted(SettingsUtils.getHost(), SettingsUtils.getClusterPort())); } diff --git a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisDriverCondition.java b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisDriverCondition.java index d4fbf0e78..b65e66d04 100644 --- a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisDriverCondition.java +++ b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisDriverCondition.java @@ -81,13 +81,12 @@ class EnabledOnRedisDriverCondition implements ExecutionCondition { } if (!foundMatch) { - return disabled(String.format("Driver %s not supported; Supported driver(s): %s", - formatUnsupportedDriver(value), - Arrays.toString(annotation.value()))); + return disabled("Driver %s not supported; Supported driver(s): %s" + .formatted(formatUnsupportedDriver(value), Arrays.toString(annotation.value()))); } } - return enabled("Found enabled driver(s): " + Arrays.toString(annotation.value())); + return enabled("Found enabled driver(s): %s".formatted(Arrays.toString(annotation.value()))); } diff --git a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisSentinelCondition.java b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisSentinelCondition.java index 9a59d80ba..2d7fe3567 100644 --- a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisSentinelCondition.java +++ b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisSentinelCondition.java @@ -52,12 +52,11 @@ class EnabledOnRedisSentinelCondition implements ExecutionCondition { if (RedisDetector.canConnectToPort(annotation.value())) { - return enabled(String.format("Connection successful to Redis Sentinel at %s:%d", SettingsUtils.getHost(), + return enabled("Connection successful to Redis Sentinel at %s:%d".formatted(SettingsUtils.getHost(), annotation.value())); } - return disabled( - String.format("Cannot connect to Redis Sentinel at %s:%d", SettingsUtils.getHost(), annotation.value())); - + return disabled("Cannot connect to Redis Sentinel at %s:%d".formatted(SettingsUtils.getHost(), + annotation.value())); } } diff --git a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisVersionCondition.java b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisVersionCondition.java index f23bfd11a..900015866 100644 --- a/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisVersionCondition.java +++ b/src/test/java/org/springframework/data/redis/test/condition/EnabledOnRedisVersionCondition.java @@ -61,11 +61,14 @@ class EnabledOnRedisVersionCondition implements ExecutionCondition { } }, RedisConditions.class); - boolean versionMet = conditions.hasVersionGreaterOrEqualsTo(requiredVersion); - return versionMet - ? enabled( - String.format("Enabled on version %s (actual version: %s)", requiredVersion, conditions.getRedisVersion())) - : disabled(String.format("Disabled, version %s not available on Redis version %s", requiredVersion, - conditions.getRedisVersion())); + boolean requiredVersionMet = conditions.hasVersionGreaterOrEqualsTo(requiredVersion); + + if (requiredVersionMet) { + return enabled("Enabled on version %s; actual version: %s".formatted(requiredVersion, + conditions.getRedisVersion())); + } + + return disabled("Disabled; version %s not available on Redis version %s".formatted(requiredVersion, + conditions.getRedisVersion())); } } diff --git a/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedRedisTestExtension.java b/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedRedisTestExtension.java index 7b89c271b..3cb80348f 100644 --- a/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedRedisTestExtension.java +++ b/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedRedisTestExtension.java @@ -61,10 +61,11 @@ class ParameterizedRedisTestExtension implements TestTemplateInvocationContextPr ParameterizedTestContext methodContext = new ParameterizedTestContext(testMethod); ParameterizedTestContext constructorContext = new ParameterizedTestContext(declaredConstructor); - Preconditions.condition(methodContext.hasPotentiallyValidSignature(), - () -> String.format("@ParameterizedRedisTest method [%s] declares formal parameters in an invalid order: " + Preconditions.condition(methodContext.hasPotentiallyValidSignature(), () -> + ("@ParameterizedRedisTest method [%s] declares formal parameters in an invalid order: " + "argument aggregators must be declared after any indexed arguments " - + "and before any arguments resolved by another ParameterResolver.", testMethod.toGenericString())); + + "and before any arguments resolved by another ParameterResolver.") + .formatted(testMethod.toGenericString())); getStore(context).put(METHOD_CONTEXT_KEY, methodContext); getStore(context).put(CONSTRUCTOR_CONTEXT_KEY, constructorContext); @@ -115,10 +116,9 @@ class ParameterizedRedisTestExtension implements TestTemplateInvocationContextPr return ReflectionUtils.newInstance(clazz); } catch (Exception ex) { if (ex instanceof NoSuchMethodException) { - String message = String.format("Failed to find a no-argument constructor for ArgumentsProvider [%s]; " - + "Please ensure that a no-argument constructor exists and " - + "that the class is either a top-level class or a static nested class", clazz.getName()); - throw new JUnitException(message, ex); + throw new JUnitException(("Failed to find a no-argument constructor for ArgumentsProvider [%s];" + + " Please ensure that a no-argument constructor exists and that the class is either" + + " a top-level class or a static nested class").formatted(clazz.getName()), ex); } throw ex; } @@ -137,10 +137,11 @@ class ParameterizedRedisTestExtension implements TestTemplateInvocationContextPr ParameterizedTestContext methodContext, String displayName, int argumentMaxLength) { ParameterizedRedisTest parameterizedTest = findAnnotation(templateMethod, ParameterizedRedisTest.class).get(); - String pattern = Preconditions.notBlank(parameterizedTest.name().trim(), - () -> String.format( - "Configuration error: @ParameterizedRedisTest on method [%s] must be declared with a non-empty name.", - templateMethod)); + + String pattern = Preconditions.notBlank(parameterizedTest.name().trim(), () -> + "Configuration error: @ParameterizedRedisTest on method [%s] must be declared with a non-empty name" + .formatted(templateMethod)); + return new ParameterizedTestNameFormatter(pattern, displayName, methodContext, argumentMaxLength); } diff --git a/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedTestNameFormatter.java b/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedTestNameFormatter.java index d67c7399a..b88598baa 100644 --- a/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedTestNameFormatter.java +++ b/src/test/java/org/springframework/data/redis/test/extension/parametrized/ParameterizedTestNameFormatter.java @@ -53,9 +53,8 @@ class ParameterizedTestNameFormatter { try { return formatSafely(invocationIndex, arguments); } catch (Exception ex) { - String message = "The display name pattern defined for the parameterized test is invalid; " - + "See nested exception for further details."; - throw new JUnitException(message, ex); + throw new JUnitException("The display name pattern defined for the parameterized test is invalid;" + + " See nested exception for further details.", ex); } } diff --git a/src/test/java/org/springframework/data/redis/test/util/MockitoUtils.java b/src/test/java/org/springframework/data/redis/test/util/MockitoUtils.java index 5a384bb83..d9928f6df 100644 --- a/src/test/java/org/springframework/data/redis/test/util/MockitoUtils.java +++ b/src/test/java/org/springframework/data/redis/test/util/MockitoUtils.java @@ -68,7 +68,7 @@ public abstract class MockitoUtils { @Override public String toString() { - return String.format("%s for method: %s", mode, method); + return "%s for method: %s".formatted(mode, method); } })); } diff --git a/src/test/java/org/springframework/data/redis/test/util/RedisTestData.java b/src/test/java/org/springframework/data/redis/test/util/RedisTestData.java index c0ca6e6f8..e1710741f 100644 --- a/src/test/java/org/springframework/data/redis/test/util/RedisTestData.java +++ b/src/test/java/org/springframework/data/redis/test/util/RedisTestData.java @@ -86,7 +86,7 @@ public class RedisTestData implements AssertProvider at <%s>", type.getName(), path); + String hint = "Type hint for <%s> at <%s>".formatted(type.getName(), path); if (!actual.containsKey(path)) {