Merge pull request #6882 from olivergierke/issue/6881
* pr/6882: Use default simple types with MongoMappingContext
This commit is contained in:
		
						commit
						fe7bbbe8ee
					
				|  | @ -17,6 +17,7 @@ | ||||||
| package org.springframework.boot.autoconfigure.data.mongo; | package org.springframework.boot.autoconfigure.data.mongo; | ||||||
| 
 | 
 | ||||||
| import java.net.UnknownHostException; | import java.net.UnknownHostException; | ||||||
|  | import java.util.Collections; | ||||||
| 
 | 
 | ||||||
| import com.mongodb.DB; | import com.mongodb.DB; | ||||||
| import com.mongodb.Mongo; | import com.mongodb.Mongo; | ||||||
|  | @ -24,7 +25,6 @@ import com.mongodb.MongoClient; | ||||||
| 
 | 
 | ||||||
| import org.springframework.beans.BeanUtils; | import org.springframework.beans.BeanUtils; | ||||||
| import org.springframework.beans.factory.BeanFactory; | import org.springframework.beans.factory.BeanFactory; | ||||||
| import org.springframework.beans.factory.NoSuchBeanDefinitionException; |  | ||||||
| import org.springframework.boot.autoconfigure.AutoConfigureAfter; | import org.springframework.boot.autoconfigure.AutoConfigureAfter; | ||||||
| import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | ||||||
|  | @ -103,24 +103,19 @@ public class MongoDataAutoConfiguration { | ||||||
| 	@Bean | 	@Bean | ||||||
| 	@ConditionalOnMissingBean(MongoConverter.class) | 	@ConditionalOnMissingBean(MongoConverter.class) | ||||||
| 	public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, | 	public MappingMongoConverter mappingMongoConverter(MongoDbFactory factory, | ||||||
| 			MongoMappingContext context, BeanFactory beanFactory) { | 			MongoMappingContext context, BeanFactory beanFactory, | ||||||
|  | 			CustomConversions conversions) { | ||||||
| 		DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); | 		DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); | ||||||
| 		MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, | 		MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, | ||||||
| 				context); | 				context); | ||||||
| 		try { | 		mappingConverter.setCustomConversions(conversions); | ||||||
| 			mappingConverter |  | ||||||
| 					.setCustomConversions(beanFactory.getBean(CustomConversions.class)); |  | ||||||
| 		} |  | ||||||
| 		catch (NoSuchBeanDefinitionException ex) { |  | ||||||
| 			// Ignore |  | ||||||
| 		} |  | ||||||
| 		return mappingConverter; | 		return mappingConverter; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Bean | 	@Bean | ||||||
| 	@ConditionalOnMissingBean | 	@ConditionalOnMissingBean | ||||||
| 	public MongoMappingContext mongoMappingContext(BeanFactory beanFactory) | 	public MongoMappingContext mongoMappingContext(BeanFactory beanFactory, | ||||||
| 			throws ClassNotFoundException { | 			CustomConversions conversions) throws ClassNotFoundException { | ||||||
| 		MongoMappingContext context = new MongoMappingContext(); | 		MongoMappingContext context = new MongoMappingContext(); | ||||||
| 		context.setInitialEntitySet(new EntityScanner(this.applicationContext) | 		context.setInitialEntitySet(new EntityScanner(this.applicationContext) | ||||||
| 				.scan(Document.class, Persistent.class)); | 				.scan(Document.class, Persistent.class)); | ||||||
|  | @ -129,6 +124,7 @@ public class MongoDataAutoConfiguration { | ||||||
| 			context.setFieldNamingStrategy( | 			context.setFieldNamingStrategy( | ||||||
| 					(FieldNamingStrategy) BeanUtils.instantiate(strategyClass)); | 					(FieldNamingStrategy) BeanUtils.instantiate(strategyClass)); | ||||||
| 		} | 		} | ||||||
|  | 		context.setSimpleTypeHolder(conversions.getSimpleTypeHolder()); | ||||||
| 		return context; | 		return context; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -141,6 +137,12 @@ public class MongoDataAutoConfiguration { | ||||||
| 				mongoTemplate.getConverter()); | 				mongoTemplate.getConverter()); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Bean | ||||||
|  | 	@ConditionalOnMissingBean | ||||||
|  | 	public CustomConversions customConversions() { | ||||||
|  | 		return new CustomConversions(Collections.emptyList()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * {@link MongoDbFactory} decorator to respect | 	 * {@link MongoDbFactory} decorator to respect | ||||||
| 	 * {@link MongoProperties#getGridFsDatabase()} if set. | 	 * {@link MongoProperties#getGridFsDatabase()} if set. | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ | ||||||
| 
 | 
 | ||||||
| package org.springframework.boot.autoconfigure.data.mongo; | package org.springframework.boot.autoconfigure.data.mongo; | ||||||
| 
 | 
 | ||||||
|  | import java.time.LocalDateTime; | ||||||
| import java.util.Arrays; | import java.util.Arrays; | ||||||
| import java.util.Set; | import java.util.Set; | ||||||
| 
 | 
 | ||||||
|  | @ -44,6 +45,7 @@ import org.springframework.data.mapping.model.PropertyNameFieldNamingStrategy; | ||||||
| import org.springframework.data.mongodb.core.MongoTemplate; | import org.springframework.data.mongodb.core.MongoTemplate; | ||||||
| import org.springframework.data.mongodb.core.convert.CustomConversions; | import org.springframework.data.mongodb.core.convert.CustomConversions; | ||||||
| import org.springframework.data.mongodb.core.mapping.MongoMappingContext; | import org.springframework.data.mongodb.core.mapping.MongoMappingContext; | ||||||
|  | import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; | ||||||
| import org.springframework.data.mongodb.gridfs.GridFsTemplate; | import org.springframework.data.mongodb.gridfs.GridFsTemplate; | ||||||
| import org.springframework.test.util.ReflectionTestUtils; | import org.springframework.test.util.ReflectionTestUtils; | ||||||
| 
 | 
 | ||||||
|  | @ -156,6 +158,17 @@ public class MongoDataAutoConfigurationTests { | ||||||
| 		assertThat(initialEntitySet).containsOnly(City.class, Country.class); | 		assertThat(initialEntitySet).containsOnly(City.class, Country.class); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Test | ||||||
|  | 	public void registersDefaultSimpleTypesWithMappingContext() { | ||||||
|  | 		this.context = new AnnotationConfigApplicationContext(); | ||||||
|  | 		this.context.register(MongoAutoConfiguration.class, | ||||||
|  | 				MongoDataAutoConfiguration.class); | ||||||
|  | 		this.context.refresh(); | ||||||
|  | 		MongoMappingContext context = this.context.getBean(MongoMappingContext.class); | ||||||
|  | 		MongoPersistentEntity<?> entity = context.getPersistentEntity(Sample.class); | ||||||
|  | 		assertThat(entity.getPersistentProperty("date").isEntity()).isFalse(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	public void testFieldNamingStrategy(String strategy, | 	public void testFieldNamingStrategy(String strategy, | ||||||
| 			Class<? extends FieldNamingStrategy> expectedType) { | 			Class<? extends FieldNamingStrategy> expectedType) { | ||||||
| 		this.context = new AnnotationConfigApplicationContext(); | 		this.context = new AnnotationConfigApplicationContext(); | ||||||
|  | @ -205,4 +218,9 @@ public class MongoDataAutoConfigurationTests { | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	static class Sample { | ||||||
|  | 
 | ||||||
|  | 		LocalDateTime date; | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue