Allow to override Couchbase's CustomConversions
Closes gh-7700
This commit is contained in:
		
							parent
							
								
									73a45797c0
								
							
						
					
					
						commit
						851ce2286f
					
				|  | @ -30,6 +30,7 @@ import org.springframework.data.couchbase.config.AbstractCouchbaseDataConfigurat | |||
| import org.springframework.data.couchbase.config.BeanNames; | ||||
| import org.springframework.data.couchbase.config.CouchbaseConfigurer; | ||||
| import org.springframework.data.couchbase.core.CouchbaseTemplate; | ||||
| import org.springframework.data.couchbase.core.convert.CustomConversions; | ||||
| import org.springframework.data.couchbase.core.mapping.Document; | ||||
| import org.springframework.data.couchbase.core.query.Consistency; | ||||
| import org.springframework.data.couchbase.repository.support.IndexManager; | ||||
|  | @ -81,6 +82,13 @@ class SpringBootCouchbaseDataConfiguration extends AbstractCouchbaseDataConfigur | |||
| 		return super.couchbaseTemplate(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	@ConditionalOnMissingBean(name = BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) | ||||
| 	@Bean(name = BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) | ||||
| 	public CustomConversions customConversions() { | ||||
| 		return super.customConversions(); | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	@ConditionalOnMissingBean(name = BeanNames.COUCHBASE_INDEX_MANAGER) | ||||
| 	@Bean(name = BeanNames.COUCHBASE_INDEX_MANAGER) | ||||
|  |  | |||
|  | @ -16,6 +16,7 @@ | |||
| 
 | ||||
| package org.springframework.boot.autoconfigure.data.couchbase; | ||||
| 
 | ||||
| import java.util.Collections; | ||||
| import java.util.Set; | ||||
| 
 | ||||
| import org.junit.After; | ||||
|  | @ -23,17 +24,22 @@ import org.junit.Test; | |||
| 
 | ||||
| import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.couchbase.CouchbaseProperties; | ||||
| import org.springframework.boot.autoconfigure.couchbase.CouchbaseTestConfigurer; | ||||
| import org.springframework.boot.autoconfigure.data.couchbase.city.City; | ||||
| import org.springframework.boot.autoconfigure.domain.EntityScan; | ||||
| import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; | ||||
| import org.springframework.boot.test.util.EnvironmentTestUtils; | ||||
| 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.core.convert.converter.Converter; | ||||
| import org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration; | ||||
| import org.springframework.data.couchbase.config.BeanNames; | ||||
| import org.springframework.data.couchbase.config.CouchbaseConfigurer; | ||||
| import org.springframework.data.couchbase.core.CouchbaseTemplate; | ||||
| import org.springframework.data.couchbase.core.convert.CustomConversions; | ||||
| import org.springframework.data.couchbase.core.mapping.CouchbaseMappingContext; | ||||
| import org.springframework.data.couchbase.core.mapping.event.ValidatingCouchbaseEventListener; | ||||
| import org.springframework.data.couchbase.core.query.Consistency; | ||||
|  | @ -119,6 +125,14 @@ public class CouchbaseDataAutoConfigurationTests { | |||
| 		assertThat(initialEntitySet).containsOnly(City.class); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void customConversions() { | ||||
| 		load(CustomConversionsConfig.class); | ||||
| 		CouchbaseTemplate template = this.context.getBean(CouchbaseTemplate.class); | ||||
| 		assertThat(template.getConverter().getConversionService() | ||||
| 				.canConvert(CouchbaseProperties.class, Boolean.class)).isTrue(); | ||||
| 	} | ||||
| 
 | ||||
| 	private void load(Class<?> config, String... environment) { | ||||
| 		AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); | ||||
| 		EnvironmentTestUtils.addEnvironment(context, environment); | ||||
|  | @ -147,6 +161,17 @@ public class CouchbaseDataAutoConfigurationTests { | |||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	@Import(CouchbaseTestConfigurer.class) | ||||
| 	static class CustomConversionsConfig { | ||||
| 
 | ||||
| 		@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) | ||||
| 		public CustomConversions myCustomConversions() { | ||||
| 			return new CustomConversions(Collections.singletonList(new MyConverter())); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	@Configuration | ||||
| 	@EntityScan("org.springframework.boot.autoconfigure.data.couchbase.city") | ||||
| 	@Import(CustomCouchbaseConfiguration.class) | ||||
|  | @ -154,4 +179,12 @@ public class CouchbaseDataAutoConfigurationTests { | |||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	static class MyConverter implements Converter<CouchbaseProperties, Boolean> { | ||||
| 
 | ||||
| 		@Override | ||||
| 		public Boolean convert(CouchbaseProperties value) { | ||||
| 			return true; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -3789,10 +3789,7 @@ http://docs.spring.io/spring-data/couchbase/docs/current/reference/html/[referen | |||
| 
 | ||||
| You can inject an auto-configured `CouchbaseTemplate` instance as you would with any | ||||
| other Spring Bean as long as a _default_ `CouchbaseConfigurer` is available (that | ||||
| happens when you enable the couchbase support as explained above). If you want to | ||||
| bypass the auto-configuration for Spring Data Couchbase, provide your own | ||||
| `org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration` | ||||
| implementation. | ||||
| happens when you enable the couchbase support as explained above). | ||||
| 
 | ||||
| 
 | ||||
| [source,java,indent=0] | ||||
|  | @ -3812,8 +3809,35 @@ implementation. | |||
| 	} | ||||
| ---- | ||||
| 
 | ||||
| If you add a `@Bean` of your own of type `CouchbaseTemplate` named `couchbaseTemplate` it | ||||
| will replace the default. | ||||
| There are a few beans that you can define in your own configuration to override those | ||||
| provided by the auto-configuration: | ||||
| 
 | ||||
| * A `CouchbaseTemplate` `@Bean` with name `couchbaseTemplate` | ||||
| * An `IndexManager` `@Bean` with name `couchbaseIndexManager` | ||||
| * A `CustomConversions` `@Bean` with name `couchbaseCustomConversions` | ||||
| 
 | ||||
| To avoid hard-coding those names in your own config, you can reuse `BeanNames` provided | ||||
| by Spring Data Couchbase. For instance, you can customize the converters to use as | ||||
| follows: | ||||
| 
 | ||||
| [source,java,indent=0] | ||||
| ---- | ||||
| 	@Configuration | ||||
| 	public class SomeConfiguration { | ||||
| 
 | ||||
| 		@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) | ||||
| 		public CustomConversions myCustomConversions() { | ||||
| 			return new CustomConversions(...); | ||||
| 		} | ||||
| 
 | ||||
| 		// ... | ||||
| 
 | ||||
| 	} | ||||
| ---- | ||||
| 
 | ||||
| TIP: If you want to fully bypass the auto-configuration for Spring Data Couchbase, provide | ||||
| your own `org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration` | ||||
| implementation. | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue