From 55b76fdca52a5d84b4bfacf072419ef361b36b3d Mon Sep 17 00:00:00 2001 From: kleung Date: Tue, 18 Aug 2020 14:31:40 +0800 Subject: [PATCH 1/2] Update dependencies to support MongoDB 4 and Spring Boot Starter 2.2.6.RELEASE --- pom.xml | 26 ++++++++++++++----- .../arhs/spring/cache/mongo/MongoCache.java | 19 +++++++------- .../spring/cache/mongo/TestConfiguration.java | 25 ++++++++++++++---- .../arhs/spring/cache/mongo/UnitTestBase.java | 4 +-- 4 files changed, 52 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index 578b14d..63e925c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,14 +5,14 @@ org.springframework.boot spring-boot-starter-parent - 1.4.2.RELEASE + 2.2.6.RELEASE com.arhs-group spring-cache-mongodb - 1.0.2-SNAPSHOT + 1.0.3-SNAPSHOT MongoDB for Spring Cache Spring Cache implementation based on MongoDB @@ -86,7 +86,7 @@ org.springframework.data spring-data-mongodb - 1.9.1.RELEASE + 2.2.6.RELEASE ch.qos.logback @@ -98,11 +98,21 @@ embedmongo-spring 1.3.0 test + + + de.flapdoodle.embed + de.flapdoodle.embed.process + + + de.flapdoodle.embed + de.flapdoodle.embed.mongo + + de.flapdoodle.embed de.flapdoodle.embed.mongo - 1.46.1 + 2.2.0 test @@ -120,6 +130,10 @@ org.springframework.data spring-data-mongodb + + org.mongodb + mongo-java-driver + ch.qos.logback logback-classic @@ -143,7 +157,7 @@ org.jacoco jacoco-maven-plugin - 0.7.7.201606060606 + 0.8.5 prepare-agent @@ -161,7 +175,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.7 + 1.6.8 true ossrh diff --git a/src/main/java/com/arhs/spring/cache/mongo/MongoCache.java b/src/main/java/com/arhs/spring/cache/mongo/MongoCache.java index 2e7c01a..a2f76a4 100644 --- a/src/main/java/com/arhs/spring/cache/mongo/MongoCache.java +++ b/src/main/java/com/arhs/spring/cache/mongo/MongoCache.java @@ -24,18 +24,18 @@ package com.arhs.spring.cache.mongo; import com.arhs.spring.cache.mongo.domain.CacheDocument; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; -import org.mockito.internal.matchers.Null; +import com.mongodb.client.ListIndexesIterable; +import com.mongodb.client.MongoCollection; +import org.bson.Document; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cache.Cache; import org.springframework.cache.support.SimpleValueWrapper; import org.springframework.dao.DuplicateKeyException; import org.springframework.data.domain.Sort; -import org.springframework.data.mongodb.core.IndexOperations; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.index.Index; +import org.springframework.data.mongodb.core.index.IndexOperations; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.CriteriaDefinition; import org.springframework.data.mongodb.core.query.Query; @@ -43,10 +43,10 @@ import java.io.*; import java.util.Base64; -import java.util.List; import java.util.Optional; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; +import java.util.stream.StreamSupport; /** * Spring {@link org.springframework.cache.Cache} adapter implementation @@ -330,15 +330,16 @@ private Index createExpireIndex() { private void updateExpireIndex(Index newExpireIndex) { final IndexOperations indexOperations = mongoTemplate.indexOps(collectionName); - final DBCollection collection = mongoTemplate.getCollection(collectionName); - final List indexes = collection.getIndexInfo(); + final MongoCollection collection = mongoTemplate.getCollection(collectionName); + final ListIndexesIterable indexes = collection.listIndexes(); - final Optional expireOptional = indexes.stream() + final Optional expireOptional = + StreamSupport.stream(indexes.spliterator(), false) .filter(index -> INDEX_NAME.equals(index.get("name"))) .findFirst(); if (expireOptional.isPresent()) { - final DBObject expire = expireOptional.get(); + final Document expire = expireOptional.get(); final long ttl = (long) expire.get("expireAfterSeconds"); if (ttl != this.ttl) { diff --git a/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java b/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java index f0bc11a..904532b 100644 --- a/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java +++ b/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java @@ -23,15 +23,22 @@ */ package com.arhs.spring.cache.mongo; -import com.mongodb.MongoClient; +import com.mongodb.MongoClientSettings; +import com.mongodb.ServerAddress; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; import cz.jirutka.spring.embedmongo.EmbeddedMongoBuilder; +import de.flapdoodle.embed.mongo.distribution.Version; +import de.flapdoodle.embed.mongo.distribution.Versions; +import de.flapdoodle.embed.process.distribution.GenericVersion; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.SimpleMongoDbFactory; +import org.springframework.data.mongodb.core.SimpleMongoClientDbFactory; import java.io.IOException; import java.net.ServerSocket; +import java.util.Arrays; /** * Spring Configuration for basic integration tests. @@ -43,7 +50,6 @@ public class TestConfiguration { private static final String DATABASE_NAME = "test"; private static final String IP_ADDRESS = "127.0.0.1"; - private static final String VERSION = "2.4.5"; /** * Gets a {@link MongoTemplate} instance. @@ -54,8 +60,9 @@ public class TestConfiguration { @Bean public MongoTemplate mongoTemplate() throws IOException { final int port = allocateRandomPort(); - final MongoClient mongoClient = new EmbeddedMongoBuilder().version(VERSION).bindIp(IP_ADDRESS).port(port).build(); - final SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(mongoClient, DATABASE_NAME); + new EmbeddedMongoBuilder().bindIp(IP_ADDRESS).port(port).build(); + final MongoClient mongoClient = createMongoClientForPort(port); + final SimpleMongoClientDbFactory simpleMongoDbFactory = new SimpleMongoClientDbFactory(mongoClient, DATABASE_NAME); return new MongoTemplate(simpleMongoDbFactory); } @@ -72,4 +79,12 @@ private static int allocateRandomPort() { } } + private static MongoClient createMongoClientForPort(int port) { + return MongoClients.create( + MongoClientSettings.builder() + .applyToClusterSettings(builder -> + builder.hosts(Arrays.asList( + new ServerAddress(IP_ADDRESS, port)))) + .build()); + } } diff --git a/src/test/java/com/arhs/spring/cache/mongo/UnitTestBase.java b/src/test/java/com/arhs/spring/cache/mongo/UnitTestBase.java index 5c05776..f58ac83 100644 --- a/src/test/java/com/arhs/spring/cache/mongo/UnitTestBase.java +++ b/src/test/java/com/arhs/spring/cache/mongo/UnitTestBase.java @@ -25,7 +25,7 @@ import org.junit.After; import org.junit.Assert; -import org.springframework.boot.test.util.EnvironmentTestUtils; +import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** @@ -54,7 +54,7 @@ protected AnnotationConfigApplicationContext load(Class[] configs, String... AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(); // Adds environment. - EnvironmentTestUtils.addEnvironment(applicationContext, environment); + TestPropertyValues.of(environment).applyTo(applicationContext); // Registers the configuration class and auto-configuration classes. applicationContext.register(TestConfiguration.class); From 606922c1b4efca7c12602ac199d9cbe13d42d838 Mon Sep 17 00:00:00 2001 From: kleung Date: Tue, 18 Aug 2020 15:00:30 +0800 Subject: [PATCH 2/2] remove unused imports --- .../java/com/arhs/spring/cache/mongo/TestConfiguration.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java b/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java index 904532b..eb70e6b 100644 --- a/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java +++ b/src/test/java/com/arhs/spring/cache/mongo/TestConfiguration.java @@ -28,9 +28,6 @@ import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import cz.jirutka.spring.embedmongo.EmbeddedMongoBuilder; -import de.flapdoodle.embed.mongo.distribution.Version; -import de.flapdoodle.embed.mongo.distribution.Versions; -import de.flapdoodle.embed.process.distribution.GenericVersion; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoTemplate;