DATAREDIS-1118 - Allow configuration of RedisCacheWriter on existing RedisCacheManagerBuilder.
We now allow configuration of the RedisCacheWriter on existing RedisCacheManagerBuilder objects. Original Pull Request: #522
This commit is contained in:
committed by
Christoph Strobl
parent
9dcbced2be
commit
0a8d431570
@@ -190,6 +190,16 @@ public class RedisCacheManager extends AbstractTransactionSupportingCacheManager
|
||||
RedisCacheConfiguration.defaultCacheConfig());
|
||||
}
|
||||
|
||||
/**
|
||||
* Entry point for builder style {@link RedisCacheManager} configuration.
|
||||
*
|
||||
* @return new {@link RedisCacheManagerBuilder}.
|
||||
* @since 2.3
|
||||
*/
|
||||
public static RedisCacheManagerBuilder builder() {
|
||||
return new RedisCacheManagerBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Entry point for builder style {@link RedisCacheManager} configuration.
|
||||
*
|
||||
@@ -272,18 +282,20 @@ public class RedisCacheManager extends AbstractTransactionSupportingCacheManager
|
||||
* Configurator for creating {@link RedisCacheManager}.
|
||||
*
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Strobl
|
||||
* @author Mark Paluch
|
||||
* @author Kezhu Wang
|
||||
* @since 2.0
|
||||
*/
|
||||
public static class RedisCacheManagerBuilder {
|
||||
|
||||
private final RedisCacheWriter cacheWriter;
|
||||
private @Nullable RedisCacheWriter cacheWriter;
|
||||
private RedisCacheConfiguration defaultCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
|
||||
private final Map<String, RedisCacheConfiguration> initialCaches = new LinkedHashMap<>();
|
||||
private boolean enableTransactions;
|
||||
boolean allowInFlightCacheCreation = true;
|
||||
|
||||
private RedisCacheManagerBuilder() {}
|
||||
|
||||
private RedisCacheManagerBuilder(RedisCacheWriter cacheWriter) {
|
||||
this.cacheWriter = cacheWriter;
|
||||
}
|
||||
@@ -298,7 +310,7 @@ public class RedisCacheManager extends AbstractTransactionSupportingCacheManager
|
||||
|
||||
Assert.notNull(connectionFactory, "ConnectionFactory must not be null!");
|
||||
|
||||
return builder(new DefaultRedisCacheWriter(connectionFactory));
|
||||
return new RedisCacheManagerBuilder(new DefaultRedisCacheWriter(connectionFactory));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -329,6 +341,22 @@ public class RedisCacheManager extends AbstractTransactionSupportingCacheManager
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure a {@link RedisCacheWriter}.
|
||||
*
|
||||
* @param cacheWriter must not be {@literal null}.
|
||||
* @return this {@link RedisCacheManagerBuilder}.
|
||||
* @since 2.3
|
||||
*/
|
||||
public RedisCacheManagerBuilder cacheWriter(RedisCacheWriter cacheWriter) {
|
||||
|
||||
Assert.notNull(cacheWriter, "CacheWriter must not be null!");
|
||||
|
||||
this.cacheWriter = cacheWriter;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable {@link RedisCache}s to synchronize cache put/evict operations with ongoing Spring-managed transactions.
|
||||
*
|
||||
@@ -435,6 +463,8 @@ public class RedisCacheManager extends AbstractTransactionSupportingCacheManager
|
||||
*/
|
||||
public RedisCacheManager build() {
|
||||
|
||||
Assert.notNull(cacheWriter, "CacheWriter must not be null!");
|
||||
|
||||
RedisCacheManager cm = new RedisCacheManager(cacheWriter, defaultCacheConfiguration, initialCaches,
|
||||
allowInFlightCacheCreation);
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.springframework.data.redis.cache;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -23,6 +24,7 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import org.springframework.cache.Cache;
|
||||
import org.springframework.cache.transaction.TransactionAwareCacheDecorator;
|
||||
import org.springframework.data.redis.cache.RedisCacheManager.RedisCacheManagerBuilder;
|
||||
@@ -150,4 +152,19 @@ public class RedisCacheManagerUnitTests {
|
||||
|
||||
assertThat(cmb.getCacheConfigurationFor("unknown")).isNotPresent();
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-1118
|
||||
public void shouldConfigureRedisCacheWriter() {
|
||||
|
||||
RedisCacheWriter writerMock = mock(RedisCacheWriter.class);
|
||||
|
||||
RedisCacheManager cm = RedisCacheManager.builder(cacheWriter).cacheWriter(writerMock).build();
|
||||
|
||||
assertThat(cm).extracting("cacheWriter").isEqualTo(writerMock);
|
||||
}
|
||||
|
||||
@Test // DATAREDIS-1118
|
||||
public void builderShouldRequireCacheWriter() {
|
||||
assertThatIllegalArgumentException().isThrownBy(() -> RedisCacheManager.builder().build());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user