Support placeholder resolution for collectionName in EnableMongoHttpSession

This commit is contained in:
Eddú Meléndez
2016-05-06 01:16:50 +10:00
committed by Rob Winch
parent 2d359986d3
commit ff4045acbd
2 changed files with 35 additions and 2 deletions

View File

@@ -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;
}
}

View File

@@ -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();
}
}
}