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 ef4ae653ab..f9c5296f95 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 @@ -15,7 +15,6 @@ */ package org.springframework.data.redis.connection.convert; -import java.io.StringReader; import java.nio.ByteBuffer; import java.time.Duration; import java.util.*; @@ -30,7 +29,6 @@ import org.springframework.data.geo.GeoResults; import org.springframework.data.geo.Metric; import org.springframework.data.geo.Metrics; -import org.springframework.data.redis.RedisSystemException; import org.springframework.data.redis.connection.ClusterSlotHashUtil; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.connection.RedisClusterNode; @@ -106,10 +104,15 @@ public static Properties toProperties(String source) { Properties info = new Properties(); - try (StringReader stringReader = new StringReader(source)) { - info.load(stringReader); - } catch (Exception ex) { - throw new RedisSystemException("Cannot read Redis info", ex); + for (String line : source.split("\\r?\\n")) { + String trimmed = line.trim(); + if (trimmed.isEmpty() || trimmed.startsWith("#")) { + continue; + } + int colonIndex = trimmed.indexOf(':'); + if (colonIndex > 0) { + info.setProperty(trimmed.substring(0, colonIndex).trim(), trimmed.substring(colonIndex + 1).trim()); + } } return info; diff --git a/src/main/java/org/springframework/data/redis/connection/convert/StringToPropertiesConverter.java b/src/main/java/org/springframework/data/redis/connection/convert/StringToPropertiesConverter.java index 42c74dc54f..77223bdc3e 100644 --- a/src/main/java/org/springframework/data/redis/connection/convert/StringToPropertiesConverter.java +++ b/src/main/java/org/springframework/data/redis/connection/convert/StringToPropertiesConverter.java @@ -15,14 +15,15 @@ */ package org.springframework.data.redis.connection.convert; -import java.io.StringReader; import java.util.Properties; import org.springframework.core.convert.converter.Converter; -import org.springframework.data.redis.RedisSystemException; /** - * Converts Strings to {@link Properties} + * Converts Strings in Redis {@code INFO} / {@code CLUSTER INFO} key:value format to {@link Properties}. + *

+ * Unlike {@link Properties#load}, this converter does not interpret escape sequences (e.g. {@code \u}) so that values + * containing backslashes — such as Windows-style file paths emitted by Redis on Windows — are preserved verbatim. * * @author Jennifer Hickey * @author Christoph Strobl @@ -31,13 +32,6 @@ public class StringToPropertiesConverter implements Converter