Skip to content

Commit 56c031e

Browse files
committed
Reinstate CouchbaseCache documentation. (#1357)
Closes #1356.
1 parent 6dc19ed commit 56c031e

File tree

6 files changed

+73
-12
lines changed

6 files changed

+73
-12
lines changed

src/main/asciidoc/caching.adoc

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ To make it work, you need to add the `@EnableCaching` annotation and configure t
2222
public class Config extends AbstractCouchbaseConfiguration {
2323
// general methods
2424
25-
@Bean
26-
public CouchbaseCacheManager cacheManager(CouchbaseTemplate couchbaseTemplate) throws Exception {
27-
CouchbaseCacheManager.CouchbaseCacheManagerBuilder builder = CouchbaseCacheManager.CouchbaseCacheManagerBuilder
28-
.fromConnectionFactory(couchbaseTemplate.getCouchbaseClientFactory());
29-
return builder.build();
30-
}
31-
25+
@Bean
26+
public CouchbaseCacheManager cacheManager(CouchbaseTemplate couchbaseTemplate) throws Exception {
27+
CouchbaseCacheManager.CouchbaseCacheManagerBuilder builder = CouchbaseCacheManager.CouchbaseCacheManagerBuilder
28+
.fromConnectionFactory(couchbaseTemplate.getCouchbaseClientFactory());
29+
builder.withCacheConfiguration("mySpringCache", CouchbaseCacheConfiguration.defaultCacheConfig());
30+
return builder.build();
31+
}
3232
----
3333
====
3434

src/main/asciidoc/index.adoc

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ include::template.adoc[]
2626
include::transactions.adoc[]
2727
include::collections.adoc[]
2828
include::ansijoins.adoc[]
29+
include::caching.adoc[]
2930
:leveloffset: -1
3031

3132
[[appendix]]

src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheCollectionIntegrationTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
*
3737
* @author Michael Reiche
3838
*/
39-
@IgnoreWhen(clusterTypes = ClusterType.MOCKED, missesCapabilities = { Capabilities.COLLECTIONS })
39+
@IgnoreWhen(clusterTypes = ClusterType.MOCKED, missesCapabilities = { Capabilities.COLLECTIONS })
4040
class CouchbaseCacheCollectionIntegrationTests extends CollectionAwareIntegrationTests {
4141

4242
volatile CouchbaseCache cache;
@@ -58,7 +58,6 @@ private void clear(CouchbaseCache c) {
5858
QueryOptions.queryOptions().scanConsistency(REQUEST_PLUS));
5959
}
6060

61-
6261
@Test
6362
void cachePutGet() {
6463
CacheUser user1 = new CacheUser(UUID.randomUUID().toString(), "first1", "last1");

src/test/java/org/springframework/data/couchbase/cache/CouchbaseCacheIntegrationTests.java

+51
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,18 @@
2121
import static org.junit.jupiter.api.Assertions.assertEquals;
2222
import static org.junit.jupiter.api.Assertions.assertNull;
2323

24+
import java.util.List;
2425
import java.util.UUID;
2526

27+
import org.junit.jupiter.api.AfterEach;
2628
import org.junit.jupiter.api.BeforeEach;
2729
import org.junit.jupiter.api.Test;
30+
import org.springframework.beans.factory.annotation.Autowired;
31+
import org.springframework.context.ApplicationContext;
32+
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
33+
import org.springframework.data.couchbase.domain.Config;
34+
import org.springframework.data.couchbase.domain.User;
35+
import org.springframework.data.couchbase.domain.UserRepository;
2836
import org.springframework.data.couchbase.util.ClusterType;
2937
import org.springframework.data.couchbase.util.IgnoreWhen;
3038
import org.springframework.data.couchbase.util.JavaIntegrationTests;
@@ -40,6 +48,8 @@
4048
class CouchbaseCacheIntegrationTests extends JavaIntegrationTests {
4149

4250
volatile CouchbaseCache cache;
51+
@Autowired CouchbaseCacheManager cacheManager; // autowired not working
52+
@Autowired UserRepository userRepository; // autowired not working
4353

4454
@BeforeEach
4555
@Override
@@ -48,6 +58,16 @@ public void beforeEach() {
4858
cache = CouchbaseCacheManager.create(couchbaseTemplate.getCouchbaseClientFactory()).createCouchbaseCache("myCache",
4959
CouchbaseCacheConfiguration.defaultCacheConfig());
5060
clear(cache);
61+
ApplicationContext ac = new AnnotationConfigApplicationContext(Config.class);
62+
cacheManager = ac.getBean(CouchbaseCacheManager.class);
63+
userRepository = ac.getBean(UserRepository.class);
64+
}
65+
66+
@AfterEach
67+
@Override
68+
public void afterEach() {
69+
clear(cache);
70+
super.afterEach();
5171
}
5272

5373
private void clear(CouchbaseCache c) {
@@ -69,6 +89,19 @@ void cachePutGet() {
6989
assertEquals(user2, cache.get(user2.getId()).get()); // get user2
7090
}
7191

92+
@Test
93+
void cacheable() {
94+
User user = new User("cache_92", "Dave", "Wilson");
95+
cacheManager.getCache("mySpringCache").clear();
96+
userRepository.save(user);
97+
long t0 = System.currentTimeMillis();
98+
List<User> users = userRepository.getByFirstname(user.getFirstname());
99+
assert (System.currentTimeMillis() - t0 > 1000 * 5);
100+
t0 = System.currentTimeMillis();
101+
users = userRepository.getByFirstname(user.getFirstname());
102+
assert (System.currentTimeMillis() - t0 < 100);
103+
}
104+
72105
@Test
73106
void cacheEvict() {
74107
CacheUser user1 = new CacheUser(UUID.randomUUID().toString(), "first1", "last1");
@@ -98,4 +131,22 @@ void cachePutIfAbsent() {
98131
assertEquals(user1, cache.get(user1.getId()).get()); // user1.getId() is still user1
99132
}
100133

134+
@Test // this test FAILS (local empty (i.e. fast) Couchbase installation)
135+
public void clearFail() {
136+
cache.put("KEY", "VALUE"); // no delay between put and clear, entry will not be
137+
cache.clear(); // will not be indexed when clear() executes
138+
assertNotNull(cache.get("KEY")); // will still find entry, clear failed to delete
139+
}
140+
141+
@Test // this WORKS
142+
public void clearWithDelayOk() throws InterruptedException {
143+
cache.put("KEY", "VALUE");
144+
Thread.sleep(50); // give main index time to update
145+
cache.clear();
146+
assertNull(cache.get("KEY"));
147+
}
148+
149+
@Test
150+
public void noOpt() {}
151+
101152
}

src/test/java/org/springframework/data/couchbase/domain/Config.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
@EnableReactiveCouchbaseRepositories
5959
@EnableCouchbaseAuditing(dateTimeProviderRef = "dateTimeProviderRef")
6060
@EnableReactiveCouchbaseAuditing(dateTimeProviderRef = "dateTimeProviderRef")
61-
61+
@EnableCaching
6262
public class Config extends AbstractCouchbaseConfiguration {
6363
String bucketname = "travel-sample";
6464
String username = "Administrator";

src/test/java/org/springframework/data/couchbase/domain/UserRepository.java

+12-2
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
import java.util.List;
2020
import java.util.stream.Stream;
2121

22-
import com.couchbase.client.java.query.QueryScanConsistency;
22+
import org.springframework.cache.annotation.Cacheable;
2323
import org.springframework.data.couchbase.repository.CouchbaseRepository;
2424
import org.springframework.data.couchbase.repository.Query;
2525
import org.springframework.data.couchbase.repository.ScanConsistency;
2626
import org.springframework.data.repository.query.Param;
2727
import org.springframework.stereotype.Repository;
2828

2929
import com.couchbase.client.java.json.JsonArray;
30+
import com.couchbase.client.java.query.QueryScanConsistency;
3031

3132
/**
3233
* User Repository for tests
@@ -35,7 +36,7 @@
3536
* @author Michael Reiche
3637
*/
3738
@Repository
38-
@ScanConsistency(query=QueryScanConsistency.REQUEST_PLUS)
39+
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
3940
public interface UserRepository extends CouchbaseRepository<User, String> {
4041

4142
List<User> findByFirstname(String firstname);
@@ -57,4 +58,13 @@ public interface UserRepository extends CouchbaseRepository<User, String> {
5758
List<User> findByIdIsNotNullAndFirstnameEquals(String firstname);
5859

5960
List<User> findByVersionEqualsAndFirstnameEquals(Long version, String firstname);
61+
62+
// simulate a slow operation
63+
@Cacheable("mySpringCache")
64+
default List<User> getByFirstname(String firstname) {
65+
try {
66+
Thread.sleep(1000 * 5);
67+
} catch (InterruptedException ie) {}
68+
return findByFirstname(firstname);
69+
}
6070
}

0 commit comments

Comments
 (0)