From 40d79f0dc6d741dbdb15c45c21b9b8fd5e9cc737 Mon Sep 17 00:00:00 2001 From: Tim Sazon Date: Fri, 21 May 2021 01:25:03 +0300 Subject: [PATCH] Use PropertyResolver to resolve placeholders in KeySpace Related tickets spring-projects/spring-data-commons#2369 --- .../mapping/BasicKeyValuePersistentEntity.java | 13 ++++++++++++- .../BasicKeyValuePersistentEntityUnitTests.java | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java b/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java index 6e1d563d..828182cf 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java +++ b/src/main/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntity.java @@ -15,6 +15,7 @@ */ package org.springframework.data.keyvalue.core.mapping; +import org.springframework.core.env.PropertyResolver; import org.springframework.data.mapping.model.BasicPersistentEntity; import org.springframework.data.util.TypeInformation; import org.springframework.expression.Expression; @@ -30,6 +31,7 @@ * @author Christoph Strobl * @author Oliver Gierke * @author Mark Paluch + * @author Tim Sazon * @param */ public class BasicKeyValuePersistentEntity> @@ -91,8 +93,17 @@ private static String resolveKeyspace(@Nullable KeySpaceResolver fallbackKeySpac */ @Override public String getKeySpace() { - return keyspaceExpression == null // + String keySpace = keyspaceExpression == null // ? keyspace // : keyspaceExpression.getValue(getEvaluationContext(null), String.class); + + if (keySpace != null) { + PropertyResolver propertyResolver = getPropertyResolver(); + if (propertyResolver != null) { + return propertyResolver.resolvePlaceholders(keySpace); + } + } + + return keySpace; } } diff --git a/src/test/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntityUnitTests.java b/src/test/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntityUnitTests.java index 65953fd2..dd6850bf 100644 --- a/src/test/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntityUnitTests.java +++ b/src/test/java/org/springframework/data/keyvalue/core/mapping/BasicKeyValuePersistentEntityUnitTests.java @@ -27,11 +27,13 @@ import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.spel.ExtensionAwareEvaluationContextProvider; import org.springframework.data.spel.spi.EvaluationContextExtension; +import org.springframework.mock.env.MockEnvironment; /** * Unit tests for {@link BasicKeyValuePersistentEntity}. * * @author Mark Paluch + * @author Tim Sazon */ class BasicKeyValuePersistentEntityUnitTests { @@ -64,9 +66,22 @@ void shouldEvaluateEntityWithoutKeyspace() { assertThat(persistentEntity.getKeySpace()).isEqualTo(NoKeyspaceEntity.class.getName()); } + @Test // GH-375 + void shouldEvaluateKeyspaceWithPropertyPlaceholders() { + + BasicKeyValuePersistentEntity persistentEntity = (BasicKeyValuePersistentEntity) mappingContext + .getPersistentEntity(PropertyEntity.class); + persistentEntity.setPropertyResolver(new MockEnvironment().withProperty("myProperty", "value")); + + assertThat(persistentEntity.getKeySpace()).isEqualTo("value"); + } + @KeySpace("#{myProperty}") private static class ExpressionEntity {} + @KeySpace("${myProperty}") + private static class PropertyEntity {} + @KeySpace private static class KeyspaceEntity {}