diff --git a/spring-session/src/main/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.java b/spring-session/src/main/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.java index 6bb74a1..9922e98 100644 --- a/spring-session/src/main/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.java +++ b/spring-session/src/main/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfiguration.java @@ -16,6 +16,7 @@ package org.springframework.session.data.mongo.config.annotation.web.http; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.EmbeddedValueResolverAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportAware; @@ -26,6 +27,7 @@ import org.springframework.session.config.annotation.web.http.SpringHttpSessionC import org.springframework.session.data.mongo.AbstractMongoSessionConverter; import org.springframework.session.data.mongo.MongoOperationsSessionRepository; import org.springframework.util.StringUtils; +import org.springframework.util.StringValueResolver; /** * Configuration class registering {@code MongoSessionRepository} bean. To import this @@ -37,13 +39,15 @@ import org.springframework.util.StringUtils; */ @Configuration public class MongoHttpSessionConfiguration extends SpringHttpSessionConfiguration - implements ImportAware { + implements EmbeddedValueResolverAware, ImportAware { private AbstractMongoSessionConverter mongoSessionConverter; private Integer maxInactiveIntervalInSeconds; private String collectionName; + private StringValueResolver embeddedValueResolver; + @Bean public MongoOperationsSessionRepository mongoSessionRepository( MongoOperations mongoOperations) { @@ -72,7 +76,10 @@ public class MongoHttpSessionConfiguration extends SpringHttpSessionConfiguratio .getAnnotationAttributes(EnableMongoHttpSession.class.getName())); this.maxInactiveIntervalInSeconds = attributes .getNumber("maxInactiveIntervalInSeconds"); - this.collectionName = attributes.getString("collectionName"); + String collectionNameValue = attributes.getString("collectionName"); + if (StringUtils.hasText(collectionNameValue)) { + this.collectionName = this.embeddedValueResolver.resolveStringValue(collectionNameValue); + } } @Autowired(required = false) @@ -80,4 +87,9 @@ public class MongoHttpSessionConfiguration extends SpringHttpSessionConfiguratio AbstractMongoSessionConverter mongoSessionConverter) { this.mongoSessionConverter = mongoSessionConverter; } + + public void setEmbeddedValueResolver(StringValueResolver resolver) { + this.embeddedValueResolver = resolver; + } + } diff --git a/spring-session/src/test/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfigurationTests.java b/spring-session/src/test/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfigurationTests.java index b58b9b8..22b75f4 100644 --- a/spring-session/src/test/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfigurationTests.java +++ b/spring-session/src/test/java/org/springframework/session/data/mongo/config/annotation/web/http/MongoHttpSessionConfigurationTests.java @@ -27,8 +27,10 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.data.mongodb.core.IndexOperations; import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.mock.env.MockEnvironment; import org.springframework.session.data.mongo.AbstractMongoSessionConverter; import org.springframework.session.data.mongo.MongoOperationsSessionRepository; import org.springframework.test.util.ReflectionTestUtils; @@ -136,6 +138,14 @@ public class MongoHttpSessionConfigurationTests { .isEqualTo(mongoSessionConverter); } + @Test + public void resolveCollectionNameByPropertyPlaceholder() { + this.context.setEnvironment(new MockEnvironment().withProperty("session.mongo.collectionName", COLLECTION_NAME)); + registerAndRefresh(CustomMongoJdbcSessionConfiguration.class); + MongoHttpSessionConfiguration configuration = this.context.getBean(MongoHttpSessionConfiguration.class); + assertThat(ReflectionTestUtils.getField(configuration, "collectionName")).isEqualTo(COLLECTION_NAME); + } + private void registerAndRefresh(Class... annotatedClasses) { this.context.register(annotatedClasses); this.context.refresh(); @@ -213,4 +223,15 @@ public class MongoHttpSessionConfigurationTests { } + @Configuration + @EnableMongoHttpSession(collectionName = "${session.mongo.collectionName}") + static class CustomMongoJdbcSessionConfiguration extends BaseConfiguration { + + @Bean + public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + } + }