From e25e88da9b3134b82ace6594dae556506fb0018b Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Thu, 28 Jul 2022 20:41:05 -0300 Subject: [PATCH 1/8] moving SpringBootPersistenceApplication class to its own package * from com.baeldung to com.baeldung.logging to prevent it from loading contexts from other applications. --- .../baeldung/{ => logging}/SpringBootPersistenceApplication.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/{ => logging}/SpringBootPersistenceApplication.java (100%) diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/logging/SpringBootPersistenceApplication.java similarity index 100% rename from persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java rename to persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/logging/SpringBootPersistenceApplication.java From 99bbdcd7f7532b6b8a0b62074e304226595814b1 Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Thu, 28 Jul 2022 20:41:05 -0300 Subject: [PATCH 2/8] moving SpringBootPersistenceApplication class to its own package * from com.baeldung to com.baeldung.logging to prevent it from loading contexts from other applications. --- .../{ => logging}/SpringBootPersistenceApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/{ => logging}/SpringBootPersistenceApplication.java (91%) diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/logging/SpringBootPersistenceApplication.java similarity index 91% rename from persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java rename to persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/logging/SpringBootPersistenceApplication.java index 2dff3f37df..bcca23b714 100644 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/SpringBootPersistenceApplication.java +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/logging/SpringBootPersistenceApplication.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.logging; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; From ff295869c2da6bedaed5bfdbe72c4f0f59ee3add Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Thu, 28 Jul 2022 20:54:30 -0300 Subject: [PATCH 3/8] Spring Data MongoDB - Configure Connection Ready for revision. --- .../SpringMongoConnectionViaBuilderApp.java | 31 +++ .../SpringMongoConnectionViaClientApp.java | 46 +++++ .../SpringMongoConnectionViaFactoryApp.java | 40 ++++ ...SpringMongoConnectionViaPropertiesApp.java | 22 ++ .../connection.via.properties/app.properties | 5 + .../MongoConnectionApplicationLiveTest.java | 188 ++++++++++++++++++ 6 files changed, 332 insertions(+) create mode 100644 persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java create mode 100644 persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java create mode 100644 persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java create mode 100644 persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java create mode 100644 persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties create mode 100644 persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java new file mode 100644 index 0000000000..00a1166a48 --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/builder/SpringMongoConnectionViaBuilderApp.java @@ -0,0 +1,31 @@ +package com.baeldung.boot.connection.via.builder; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer; +import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +import com.mongodb.ConnectionString; + +@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) +@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) +@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) +public class SpringMongoConnectionViaBuilderApp { + + public static void main(String... args) { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaBuilderApp.class); + app.web(WebApplicationType.NONE); + app.run(args); + } + + @Bean + public MongoClientSettingsBuilderCustomizer customizer(@Value("${custom.uri}") String uri) { + ConnectionString connection = new ConnectionString(uri); + return settings -> settings.applyConnectionString(connection); + } +} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java new file mode 100644 index 0000000000..6b86fcac2b --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/client/SpringMongoConnectionViaClientApp.java @@ -0,0 +1,46 @@ +package com.baeldung.boot.connection.via.client; + +import org.bson.Document; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +import com.mongodb.client.ListDatabasesIterable; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; + +@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) +@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) +@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) +public class SpringMongoConnectionViaClientApp extends AbstractMongoClientConfiguration { + + public static void main(String... args) { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaClientApp.class); + app.web(WebApplicationType.NONE); + app.run(args); + } + + @Value("${spring.data.mongodb.uri}") + private String uri; + + @Value("${spring.data.mongodb.database}") + private String db; + + @Override + public MongoClient mongoClient() { + MongoClient client = MongoClients.create(uri); + ListDatabasesIterable databases = client.listDatabases(); + databases.forEach(System.out::println); + return client; + } + + @Override + protected String getDatabaseName() { + return db; + } +} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java new file mode 100644 index 0000000000..7f7c3f0668 --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/factory/SpringMongoConnectionViaFactoryApp.java @@ -0,0 +1,40 @@ +package com.baeldung.boot.connection.via.factory; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.data.mongodb.core.MongoClientFactoryBean; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +import com.mongodb.ConnectionString; +import com.mongodb.client.MongoClient; + +@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) +@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) +@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) +public class SpringMongoConnectionViaFactoryApp { + + public static void main(String... args) { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaFactoryApp.class); + app.web(WebApplicationType.NONE); + app.run(args); + } + + @Bean + public MongoClientFactoryBean mongo(@Value("${custom.uri}") String uri) throws Exception { + MongoClientFactoryBean mongo = new MongoClientFactoryBean(); + ConnectionString conn = new ConnectionString(uri); + mongo.setConnectionString(conn); + + mongo.setSingleton(false); + + MongoClient client = mongo.getObject(); + client.listDatabaseNames() + .forEach(System.out::println); + return mongo; + } +} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java new file mode 100644 index 0000000000..e6eb1dea33 --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/java/com/baeldung/boot/connection/via/properties/SpringMongoConnectionViaPropertiesApp.java @@ -0,0 +1,22 @@ +package com.baeldung.boot.connection.via.properties; + +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; + +@PropertySource("classpath:connection.via.properties/app.properties") +@EnableAutoConfiguration(exclude = EmbeddedMongoAutoConfiguration.class) +@EnableMongoRepositories(basePackages = { "com.baeldung.boot.connection.base" }) +@SpringBootApplication(scanBasePackages = { "com.baeldung.boot.connection.base" }) +public class SpringMongoConnectionViaPropertiesApp { + + public static void main(String... args) { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); + app.web(WebApplicationType.NONE); + app.run(args); + } +} diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties new file mode 100644 index 0000000000..6e5d8c3050 --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/main/resources/connection.via.properties/app.properties @@ -0,0 +1,5 @@ +spring.data.mongodb.database=baeldung +spring.data.mongodb.host=localhost +spring.data.mongodb.port=27017 +spring.data.mongodb.username=admin +spring.data.mongodb.password=password diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java new file mode 100644 index 0000000000..66fbe1a2fb --- /dev/null +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java @@ -0,0 +1,188 @@ +package com.baeldung.boot.connection.via.tests; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +import org.bson.Document; +import org.junit.Before; +import org.junit.Test; +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.test.annotation.DirtiesContext; + +import com.baeldung.boot.connection.via.builder.SpringMongoConnectionViaBuilderApp; +import com.baeldung.boot.connection.via.client.SpringMongoConnectionViaClientApp; +import com.baeldung.boot.connection.via.factory.SpringMongoConnectionViaFactoryApp; +import com.baeldung.boot.connection.via.properties.SpringMongoConnectionViaPropertiesApp; + +@DirtiesContext +public class MongoConnectionApplicationLiveTest { + private static final String HOST = "localhost"; + private static final String PORT = "27017"; + private static final String DB = "baeldung"; + private static final String USER = "admin"; + private static final String PASS = "password"; + + private void assertInsertSucceeds(ConfigurableApplicationContext context) { + String name = "A"; + + MongoTemplate mongo = context.getBean(MongoTemplate.class); + Document doc = Document.parse("{\"name\":\"" + name + "\"}"); + Document inserted = mongo.insert(doc, "items"); + + assertNotNull(inserted.get("_id")); + assertEquals(inserted.get("name"), name); + } + + @Before + public void clearSystemProperties() { + System.clearProperty("spring.data.mongodb.host"); + System.clearProperty("spring.data.mongodb.port"); + System.clearProperty("spring.data.mongodb.database"); + System.clearProperty("spring.data.mongodb.username"); + System.clearProperty("spring.data.mongodb.password"); + System.clearProperty("spring.data.mongodb.uri"); + } + + @Test + public void whenPropertiesConfig_thenInsertSucceeds() { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) + .properties( + "spring.data.mongodb.host=" + HOST, + "spring.data.mongodb.port=" + PORT, + "spring.data.mongodb.database=" + DB, + "spring.data.mongodb.username=" + USER, + "spring.data.mongodb.password=" + PASS + ); + app.web(WebApplicationType.NONE) + .run(); + + assertInsertSucceeds(app.context()); + } + + @Test + public void whenSystemConfig_thenInsertSucceeds() { + System.setProperty("spring.data.mongodb.host", HOST); + System.setProperty("spring.data.mongodb.port", PORT); + System.setProperty("spring.data.mongodb.database", DB); + System.setProperty("spring.data.mongodb.username", USER); + System.setProperty("spring.data.mongodb.password", PASS); + + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); + app.web(WebApplicationType.NONE) + .run(); + + assertInsertSucceeds(app.context()); + } + + @Test + public void givenPrecedence_whenSystemConfig_thenInsertSucceeds() { + System.setProperty("spring.data.mongodb.host", HOST); + System.setProperty("spring.data.mongodb.port", PORT); + System.setProperty("spring.data.mongodb.database", DB); + System.setProperty("spring.data.mongodb.username", USER); + System.setProperty("spring.data.mongodb.password", PASS); + + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) + .properties( + "spring.data.mongodb.host=incorrect", + "spring.data.mongodb.port=incorrect", + "spring.data.mongodb.database=incorrect", + "spring.data.mongodb.username=incorrect", + "spring.data.mongodb.password=incorrect" + ); + + app.web(WebApplicationType.NONE) + .run(); + + assertInsertSucceeds(app.context()); + } + + @Test + public void givenPrecedence_whenApplicationArgs_thenInsertSucceeds() { + System.setProperty("spring.data.mongodb.host", "incorrect"); + System.setProperty("spring.data.mongodb.port", "incorrect"); + System.setProperty("spring.data.mongodb.database", "incorrect"); + System.setProperty("spring.data.mongodb.username", "incorrect"); + System.setProperty("spring.data.mongodb.password", "incorrect"); + + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); + app.web(WebApplicationType.NONE) + .run( + "--spring.data.mongodb.host=" + HOST, + "--spring.data.mongodb.port=" + PORT, + "--spring.data.mongodb.database=" + DB, + "--spring.data.mongodb.username=" + USER, + "--spring.data.mongodb.password=" + PASS + ); + + assertInsertSucceeds(app.context()); + } + + @Test + public void givenConnectionUri_whenAlsoIncludingIndividualParameters_thenInvalidConfig() { + System.setProperty( + "spring.data.mongodb.uri", + "mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB + ); + + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) + .properties( + "spring.data.mongodb.host=" + HOST, + "spring.data.mongodb.port=" + PORT, + "spring.data.mongodb.database=" + DB, + "spring.data.mongodb.username=" + USER, + "spring.data.mongodb.password=" + PASS + ); + + BeanCreationException e = assertThrows(BeanCreationException.class, () -> { + app.web(WebApplicationType.NONE) + .run(); + }); + + Throwable rootCause = e.getRootCause(); + assertTrue(rootCause instanceof IllegalStateException); + assertThat(rootCause.getMessage() + .contains("Invalid mongo configuration, either uri or host/port/credentials/replicaSet must be specified")); + } + + @Test + public void whenClientConfig_thenInsertSucceeds() { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaClientApp.class); + app.web(WebApplicationType.NONE) + .run( + "--spring.data.mongodb.uri=mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB, + "--spring.data.mongodb.database=" + DB + ); + + assertInsertSucceeds(app.context()); + } + + @Test + public void whenFactoryConfig_thenInsertSucceeds() { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaFactoryApp.class); + app.web(WebApplicationType.NONE) + .run( + "--custom.uri=mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB + ); + + assertInsertSucceeds(app.context()); + } + + @Test + public void whenBuilderConfig_thenInsertSucceeds() { + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaBuilderApp.class); + app.web(WebApplicationType.NONE) + .run( + "--custom.uri=mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB + ); + + assertInsertSucceeds(app.context()); + } +} From e613538031ed569961b8217b87c61e7b5c63ecab Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Fri, 5 Aug 2022 21:02:25 -0300 Subject: [PATCH 4/8] fixed tests to reflect article changes --- .../MongoConnectionApplicationLiveTest.java | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java b/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java index 66fbe1a2fb..a306232c8a 100644 --- a/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java +++ b/persistence-modules/spring-boot-persistence-mongodb-2/src/test/java/com/baeldung/boot/connection/via/tests/MongoConnectionApplicationLiveTest.java @@ -52,14 +52,7 @@ public class MongoConnectionApplicationLiveTest { @Test public void whenPropertiesConfig_thenInsertSucceeds() { - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) - .properties( - "spring.data.mongodb.host=" + HOST, - "spring.data.mongodb.port=" + PORT, - "spring.data.mongodb.database=" + DB, - "spring.data.mongodb.username=" + USER, - "spring.data.mongodb.password=" + PASS - ); + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class); app.web(WebApplicationType.NONE) .run(); @@ -91,11 +84,11 @@ public class MongoConnectionApplicationLiveTest { SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) .properties( - "spring.data.mongodb.host=incorrect", - "spring.data.mongodb.port=incorrect", - "spring.data.mongodb.database=incorrect", - "spring.data.mongodb.username=incorrect", - "spring.data.mongodb.password=incorrect" + "spring.data.mongodb.host=oldValue", + "spring.data.mongodb.port=oldValue", + "spring.data.mongodb.database=oldValue", + "spring.data.mongodb.username=oldValue", + "spring.data.mongodb.password=oldValue" ); app.web(WebApplicationType.NONE) @@ -132,18 +125,17 @@ public class MongoConnectionApplicationLiveTest { "mongodb://" + USER + ":" + PASS + "@" + HOST + ":" + PORT + "/" + DB ); - SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) + SpringApplicationBuilder app = new SpringApplicationBuilder(SpringMongoConnectionViaPropertiesApp.class) + .web(WebApplicationType.NONE) .properties( "spring.data.mongodb.host=" + HOST, "spring.data.mongodb.port=" + PORT, - "spring.data.mongodb.database=" + DB, "spring.data.mongodb.username=" + USER, "spring.data.mongodb.password=" + PASS ); BeanCreationException e = assertThrows(BeanCreationException.class, () -> { - app.web(WebApplicationType.NONE) - .run(); + app.run(); }); Throwable rootCause = e.getRootCause(); From 46aceb10ed59212fd2a46ba60c15ef29801a8c7b Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Mon, 8 Aug 2022 13:35:14 -0300 Subject: [PATCH 5/8] BAEL-5657 --- jackson-modules/jackson-conversions-2/pom.xml | 11 ++++ .../jackson/jsonurlreader/JsonUrlReader.java | 53 ++++++++++++++++ .../jackson/jsonurlreader/data/Example.java | 40 ++++++++++++ .../jackson/jsonurlreader/JsonMockServer.java | 62 +++++++++++++++++++ .../JsonUrlReaderIntegrationTest.java | 33 ++++++++++ 5 files changed, 199 insertions(+) create mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java create mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java create mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java create mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml index 7e994fb52b..61b094057f 100644 --- a/jackson-modules/jackson-conversions-2/pom.xml +++ b/jackson-modules/jackson-conversions-2/pom.xml @@ -32,6 +32,13 @@ jackson-dataformat-csv ${jackson.version} + + + org.mock-server + mockserver-netty + ${mockserver-netty.version} + test + @@ -44,4 +51,8 @@ + + 5.13.2 + + \ No newline at end of file diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java new file mode 100644 index 0000000000..a053b3caea --- /dev/null +++ b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java @@ -0,0 +1,53 @@ +package com.baeldung.jackson.jsonurlreader; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.nio.charset.Charset; + +import com.fasterxml.jackson.core.exc.StreamReadException; +import com.fasterxml.jackson.databind.DatabindException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class JsonUrlReader { + + public static void main(String[] args) throws StreamReadException, DatabindException, MalformedURLException, IOException { + String url = args[0]; + + JsonNode node = JsonUrlReader.get(url); + System.out.println(node.toPrettyString()); + } + + public static String stream(String url) throws IOException { + try (InputStream input = new URL(url).openStream()) { + InputStreamReader isr = new InputStreamReader(input, Charset.forName("UTF-8")); + BufferedReader reader = new BufferedReader(isr); + StringBuilder json = new StringBuilder(); + int c; + while ((c = reader.read()) != -1) { + json.append((char) c); + } + return json.toString(); + } + } + + public static JsonNode get(String url) throws StreamReadException, DatabindException, MalformedURLException, IOException { + ObjectMapper mapper = new ObjectMapper(); + JsonNode json = mapper.readTree(new URL(url)); + return json; + } + + public static T get(String url, Class type) throws StreamReadException, DatabindException, MalformedURLException, IOException { + ObjectMapper mapper = new ObjectMapper(); + T entity = mapper.readValue(new URL(url), type); + return entity; + } + + public static String getString(String url) throws StreamReadException, DatabindException, MalformedURLException, IOException { + return get(url).toPrettyString(); + } +} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java new file mode 100644 index 0000000000..062ee51b20 --- /dev/null +++ b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java @@ -0,0 +1,40 @@ +package com.baeldung.jackson.jsonurlreader.data; + +public class Example { + private String name; + private Integer n; + private Boolean real; + + public Example() { + } + + public Example(String name, Integer n, Boolean real) { + this.name = name; + this.n = n; + this.real = real; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getN() { + return n; + } + + public void setN(Integer n) { + this.n = n; + } + + public Boolean getReal() { + return real; + } + + public void setReal(Boolean real) { + this.real = real; + } +} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java new file mode 100644 index 0000000000..5debc73e0f --- /dev/null +++ b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java @@ -0,0 +1,62 @@ +package com.baeldung.jackson.jsonurlreader; + +import static org.mockserver.integration.ClientAndServer.startClientAndServer; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + +import java.io.IOException; +import java.net.ServerSocket; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.mockserver.client.MockServerClient; +import org.mockserver.integration.ClientAndServer; +import org.mockserver.model.HttpStatusCode; + +import com.baeldung.jackson.jsonurlreader.data.Example; + +public class JsonMockServer { + protected static final String JSON_RESPONSE = "{ \"name\": \"A\", \"n\": 1, \"real\": true }"; + protected static final Example OBJECT_RESPONSE = new Example("A", 1, true); + + protected static String serviceUrl; + + private static final String SERVER_ADDRESS = "127.0.0.1"; + private static final String PATH = "/sample-json"; + + private static ClientAndServer mockServer; + private static int serverPort; + + @BeforeAll + static void startServer() throws IOException { + serverPort = getFreePort(); + serviceUrl = "http://" + SERVER_ADDRESS + ":" + serverPort + PATH; + + mockServer = startClientAndServer(serverPort); + + mockJsonRequest(); + } + + @AfterAll + static void stopServer() { + mockServer.stop(); + } + + @SuppressWarnings("resource") + private static void mockJsonRequest() { + new MockServerClient(SERVER_ADDRESS, serverPort) + .when(request() + .withPath(PATH) + .withMethod("GET")) + .respond(response() + .withStatusCode(HttpStatusCode.OK_200.code()) + .withBody(JSON_RESPONSE) + ); + } + + private static int getFreePort() throws IOException { + try (ServerSocket serverSocket = new ServerSocket(0)) { + return serverSocket.getLocalPort(); + } + } +} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java new file mode 100644 index 0000000000..e429953777 --- /dev/null +++ b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java @@ -0,0 +1,33 @@ +package com.baeldung.jackson.jsonurlreader; + +import static org.junit.Assert.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.baeldung.jackson.jsonurlreader.data.Example; +import com.fasterxml.jackson.databind.JsonNode; + +public class JsonUrlReaderIntegrationTest extends JsonMockServer { + + @Test + public void whenStreamUrl_thenJsonStringReturned() throws Exception { + String jsonNode = JsonUrlReader.stream(serviceUrl); + + assertEquals(jsonNode, JSON_RESPONSE); + } + + @Test + public void whenGetUrl_thenJsonNodeReturned() throws Exception { + JsonNode jsonNode = JsonUrlReader.get(serviceUrl); + + assertEquals(jsonNode.get("name") + .textValue(), "A"); + } + + @Test + public void givenType_whenGetUrl_thenTypeReturned() throws Exception { + Example object = JsonUrlReader.get(serviceUrl, Example.class); + + assertEquals(object.getName(), "A"); + } +} From d23e389a00f8b2c88004cd1061fe6dccc403bd30 Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Mon, 8 Aug 2022 13:40:15 -0300 Subject: [PATCH 6/8] reverting BAEL-5657 --- .../jackson/jsonurlreader/JsonUrlReader.java | 53 ---------------- .../jackson/jsonurlreader/data/Example.java | 40 ------------ .../jackson/jsonurlreader/JsonMockServer.java | 62 ------------------- .../JsonUrlReaderIntegrationTest.java | 33 ---------- 4 files changed, 188 deletions(-) delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java delete mode 100644 jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java delete mode 100644 jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java deleted file mode 100644 index a053b3caea..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/JsonUrlReader.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.jackson.jsonurlreader; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.charset.Charset; - -import com.fasterxml.jackson.core.exc.StreamReadException; -import com.fasterxml.jackson.databind.DatabindException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JsonUrlReader { - - public static void main(String[] args) throws StreamReadException, DatabindException, MalformedURLException, IOException { - String url = args[0]; - - JsonNode node = JsonUrlReader.get(url); - System.out.println(node.toPrettyString()); - } - - public static String stream(String url) throws IOException { - try (InputStream input = new URL(url).openStream()) { - InputStreamReader isr = new InputStreamReader(input, Charset.forName("UTF-8")); - BufferedReader reader = new BufferedReader(isr); - StringBuilder json = new StringBuilder(); - int c; - while ((c = reader.read()) != -1) { - json.append((char) c); - } - return json.toString(); - } - } - - public static JsonNode get(String url) throws StreamReadException, DatabindException, MalformedURLException, IOException { - ObjectMapper mapper = new ObjectMapper(); - JsonNode json = mapper.readTree(new URL(url)); - return json; - } - - public static T get(String url, Class type) throws StreamReadException, DatabindException, MalformedURLException, IOException { - ObjectMapper mapper = new ObjectMapper(); - T entity = mapper.readValue(new URL(url), type); - return entity; - } - - public static String getString(String url) throws StreamReadException, DatabindException, MalformedURLException, IOException { - return get(url).toPrettyString(); - } -} diff --git a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java b/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java deleted file mode 100644 index 062ee51b20..0000000000 --- a/jackson-modules/jackson-conversions-2/src/main/java/com/baeldung/jackson/jsonurlreader/data/Example.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.jackson.jsonurlreader.data; - -public class Example { - private String name; - private Integer n; - private Boolean real; - - public Example() { - } - - public Example(String name, Integer n, Boolean real) { - this.name = name; - this.n = n; - this.real = real; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getN() { - return n; - } - - public void setN(Integer n) { - this.n = n; - } - - public Boolean getReal() { - return real; - } - - public void setReal(Boolean real) { - this.real = real; - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java deleted file mode 100644 index 5debc73e0f..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonMockServer.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.baeldung.jackson.jsonurlreader; - -import static org.mockserver.integration.ClientAndServer.startClientAndServer; -import static org.mockserver.model.HttpRequest.request; -import static org.mockserver.model.HttpResponse.response; - -import java.io.IOException; -import java.net.ServerSocket; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.mockserver.client.MockServerClient; -import org.mockserver.integration.ClientAndServer; -import org.mockserver.model.HttpStatusCode; - -import com.baeldung.jackson.jsonurlreader.data.Example; - -public class JsonMockServer { - protected static final String JSON_RESPONSE = "{ \"name\": \"A\", \"n\": 1, \"real\": true }"; - protected static final Example OBJECT_RESPONSE = new Example("A", 1, true); - - protected static String serviceUrl; - - private static final String SERVER_ADDRESS = "127.0.0.1"; - private static final String PATH = "/sample-json"; - - private static ClientAndServer mockServer; - private static int serverPort; - - @BeforeAll - static void startServer() throws IOException { - serverPort = getFreePort(); - serviceUrl = "http://" + SERVER_ADDRESS + ":" + serverPort + PATH; - - mockServer = startClientAndServer(serverPort); - - mockJsonRequest(); - } - - @AfterAll - static void stopServer() { - mockServer.stop(); - } - - @SuppressWarnings("resource") - private static void mockJsonRequest() { - new MockServerClient(SERVER_ADDRESS, serverPort) - .when(request() - .withPath(PATH) - .withMethod("GET")) - .respond(response() - .withStatusCode(HttpStatusCode.OK_200.code()) - .withBody(JSON_RESPONSE) - ); - } - - private static int getFreePort() throws IOException { - try (ServerSocket serverSocket = new ServerSocket(0)) { - return serverSocket.getLocalPort(); - } - } -} diff --git a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java b/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java deleted file mode 100644 index e429953777..0000000000 --- a/jackson-modules/jackson-conversions-2/src/test/java/com/baeldung/jackson/jsonurlreader/JsonUrlReaderIntegrationTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.jackson.jsonurlreader; - -import static org.junit.Assert.assertEquals; - -import org.junit.jupiter.api.Test; - -import com.baeldung.jackson.jsonurlreader.data.Example; -import com.fasterxml.jackson.databind.JsonNode; - -public class JsonUrlReaderIntegrationTest extends JsonMockServer { - - @Test - public void whenStreamUrl_thenJsonStringReturned() throws Exception { - String jsonNode = JsonUrlReader.stream(serviceUrl); - - assertEquals(jsonNode, JSON_RESPONSE); - } - - @Test - public void whenGetUrl_thenJsonNodeReturned() throws Exception { - JsonNode jsonNode = JsonUrlReader.get(serviceUrl); - - assertEquals(jsonNode.get("name") - .textValue(), "A"); - } - - @Test - public void givenType_whenGetUrl_thenTypeReturned() throws Exception { - Example object = JsonUrlReader.get(serviceUrl, Example.class); - - assertEquals(object.getName(), "A"); - } -} From c8a3e41be2a45304d64ffefda2e422d7906fa70d Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Mon, 8 Aug 2022 13:41:33 -0300 Subject: [PATCH 7/8] reverting BAEL-5657 --- jackson-modules/jackson-conversions-2/pom.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml index 61b094057f..7e994fb52b 100644 --- a/jackson-modules/jackson-conversions-2/pom.xml +++ b/jackson-modules/jackson-conversions-2/pom.xml @@ -32,13 +32,6 @@ jackson-dataformat-csv ${jackson.version} - - - org.mock-server - mockserver-netty - ${mockserver-netty.version} - test - @@ -51,8 +44,4 @@ - - 5.13.2 - - \ No newline at end of file From 8edd76ccb021f8767d8e72f4554e56caf0921bea Mon Sep 17 00:00:00 2001 From: Ulisses Lima Date: Tue, 30 Aug 2022 11:02:12 -0300 Subject: [PATCH 8/8] "Vendredi" is Friday in french, not Wednesday --- .../baeldung/simpledateformat/SimpleDateFormatUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java index 7e1fcd9b3d..c2613178a1 100644 --- a/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java +++ b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/simpledateformat/SimpleDateFormatUnitTest.java @@ -41,8 +41,8 @@ public class SimpleDateFormatUnitTest { @Test public void givenFranceLocale_whenFormatted_thenCheckFormatCorrect() throws Exception{ SimpleDateFormat franceDateFormatter = new SimpleDateFormat("EEEEE dd-MMMMMMM-yyyy", Locale.FRANCE); - Date myWednesday = new Date(1539341312904L); - assertTrue(franceDateFormatter.format(myWednesday).startsWith("vendredi")); + Date myFriday = new Date(1539341312904L); + assertTrue(franceDateFormatter.format(myFriday).startsWith("vendredi")); } @Test