Skip to content

Commit 053f0de

Browse files
committed
Reinstate RedisCacheConfiguration.getTtl() as deprecated.
Closes spring-projects#2628 Original Pull Request: spring-projects#2597
1 parent 605fc0f commit 053f0de

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

Diff for: src/main/java/org/springframework/data/redis/cache/RedisCacheConfiguration.java

+20
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,26 @@ public SerializationPair<Object> getValueSerializationPair() {
326326
return this.valueSerializationPair;
327327
}
328328

329+
/**
330+
* Returns a computed {@link Duration TTL expiration timeout} based on cache entry key/value
331+
* if a {@link TtlFunction} was confiugred using {@link #entryTtl(TtlFunction)}.
332+
* <p>
333+
* Otherwise, returns the user-provided, fixed {@link Duration} if {@link #entryTtl(Duration)}
334+
* was called during cache configuration.
335+
*
336+
* @return the configured {@link Duration TTL expiration}.
337+
* @deprecated use {@link #getTtlFunction()} instead.
338+
*/
339+
@Deprecated
340+
@SuppressWarnings("all")
341+
public Duration getTtl() {
342+
343+
TtlFunction ttlFunction = getTtlFunction();
344+
345+
return ttlFunction instanceof FixedDurationTtlFunction it ? it.duration()
346+
: ttlFunction.getTimeToLive(null, null);
347+
}
348+
329349
/**
330350
* Gets the {@link TtlFunction} used to compute a cache key {@literal time-to-live (TTL) expiration}.
331351
*

Diff for: src/test/java/org/springframework/data/redis/cache/RedisCacheConfigurationUnitTests.java

+48-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,18 @@
1515
*/
1616
package org.springframework.data.redis.cache;
1717

18-
import org.junit.jupiter.api.Test;
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.mockito.ArgumentMatchers.any;
20+
import static org.mockito.ArgumentMatchers.isNull;
21+
import static org.mockito.Mockito.doReturn;
22+
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.times;
24+
import static org.mockito.Mockito.verify;
25+
import static org.mockito.Mockito.verifyNoMoreInteractions;
26+
27+
import java.time.Duration;
1928

20-
import static org.assertj.core.api.Assertions.*;
29+
import org.junit.jupiter.api.Test;
2130

2231
import org.springframework.beans.DirectFieldAccessor;
2332
import org.springframework.core.convert.converter.Converter;
@@ -28,6 +37,7 @@
2837
* Unit tests for {@link RedisCacheConfiguration}.
2938
*
3039
* @author Mark Paluch
40+
* @author John Blum
3141
*/
3242
class RedisCacheConfigurationUnitTests {
3343

@@ -56,6 +66,42 @@ void shouldAllowConverterRegistration() {
5666
assertThat(config.getConversionService().canConvert(DomainType.class, String.class)).isTrue();
5767
}
5868

69+
@Test // GH-2628
70+
@SuppressWarnings("deprecation")
71+
void getTtlReturnsFixedDuration() {
72+
73+
Duration sixtySeconds = Duration.ofSeconds(60);
74+
75+
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
76+
.entryTtl(sixtySeconds);
77+
78+
79+
assertThat(cacheConfiguration).isNotNull();
80+
assertThat(cacheConfiguration.getTtl()).isEqualByComparingTo(sixtySeconds);
81+
assertThat(cacheConfiguration.getTtl()).isEqualByComparingTo(sixtySeconds); // does not change!
82+
}
83+
84+
@Test // GH-2628
85+
@SuppressWarnings("deprecation")
86+
public void getTtlCanReturnDynamicDuration() {
87+
88+
Duration thirtyMinutes = Duration.ofMinutes(30);
89+
Duration twoHours = Duration.ofHours(2);
90+
91+
RedisCacheWriter.TtlFunction mockTtlFunction = mock(RedisCacheWriter.TtlFunction.class);
92+
93+
doReturn(thirtyMinutes).doReturn(twoHours).when(mockTtlFunction).getTimeToLive(any(), any());
94+
95+
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
96+
.entryTtl(mockTtlFunction);
97+
98+
assertThat(cacheConfiguration.getTtl()).isEqualTo(thirtyMinutes);
99+
assertThat(cacheConfiguration.getTtl()).isEqualTo(twoHours);
100+
101+
verify(mockTtlFunction, times(2)).getTimeToLive(isNull(), isNull());
102+
verifyNoMoreInteractions(mockTtlFunction);
103+
}
104+
59105
private static class DomainType {
60106

61107
}

0 commit comments

Comments
 (0)