Merge branch 'eugenp:master' into jira/BAEL-7374-start-stop-kafka-consumer

This commit is contained in:
Amol Gote 2024-02-11 10:29:07 -05:00 committed by GitHub
commit 592b0d166d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
97 changed files with 1178 additions and 223 deletions

View File

@ -6,4 +6,5 @@
- [Calculate Distance Between Two Coordinates in Java](https://www.baeldung.com/java-find-distance-between-points)
- [Rotate Arrays in Java](https://www.baeldung.com/java-rotate-arrays)
- [Find Missing Number From a Given Array in Java](https://www.baeldung.com/java-array-find-missing-number)
- [Calculate Weighted Mean in Java](https://www.baeldung.com/java-compute-weighted-average)
- More articles: [[<-- prev]](/algorithms-miscellaneous-6)

View File

@ -0,0 +1,61 @@
package com.baeldung.algorithms.firstnonrepeating;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FirstNonRepeatingElement {
public static Integer findFirstNonRepeatingUsingForLoop(List<Integer> list) {
for (int i = 0; i < list.size(); i++) {
int current = list.get(i);
boolean isRepeating = false;
for (int j = 0; j < list.size(); j++) {
if (i != j && current == list.get(j)) {
isRepeating = true;
break;
}
}
if (!isRepeating) {
return current;
}
}
return null;
}
public static Integer findFirstNonRepeatedElementUsingIndex(List<Integer> list) {
for (int i = 0; i < list.size(); i++) {
if (list.indexOf(list.get(i)) == list.lastIndexOf(list.get(i))) {
return list.get(i);
}
}
return null;
}
public static Integer findFirstNonRepeatingUsingHashMap(List<Integer> list) {
Map<Integer, Integer> counts = new HashMap<>();
for (int num : list) {
counts.put(num, counts.getOrDefault(num, 0) + 1);
}
for (int num : list) {
if (counts.get(num) == 1) {
return num;
}
}
return null;
}
public static Integer findFirstNonRepeatingUsingArray(List<Integer> list) {
int maxElement = Collections.max(list);
int[] frequency = new int[maxElement + 1];
for (int num : list) {
frequency[num]++;
}
for (int num : list) {
if (frequency[num] == 1) {
return num;
}
}
return null;
}
}

View File

@ -0,0 +1,43 @@
package com.baeldung.algorithms.firstnonrepeating;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class FirstNonRepeatingElementUnitTest {
private List<Integer> list;
@BeforeEach
void setUp() {
list = Arrays.asList(1, 2, 3, 2, 1, 4, 5, 4);
}
@Test
void whenUsingForLoop_thenReturnFirstNonRepeatingElement() {
int result = FirstNonRepeatingElement.findFirstNonRepeatingUsingForLoop(list);
assertEquals(3, result);
}
@Test
void whenUsingIndexOf_thenReturnFirstNonRepeatingElement() {
int result = FirstNonRepeatingElement.findFirstNonRepeatedElementUsingIndex(list);
assertEquals(3, result);
}
@Test
void whenUsingHashMap_thenReturnFirstNonRepeatingElement() {
int result = FirstNonRepeatingElement.findFirstNonRepeatingUsingHashMap(list);
assertEquals(3, result);
}
@Test
void whenUsingArray_thenReturnFirstNonRepeatingElement() {
int result = FirstNonRepeatingElement.findFirstNonRepeatingUsingArray(list);
assertEquals(3, result);
}
}

View File

@ -0,0 +1,39 @@
package com.baeldung.movezerototheend;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
public class MoveZeroesToTheEndOfAnArrayUnitTest {
private static final int[] EXPECTED = new int[] { 42, 2, 3, 4, 0, 0 };
@Test
void whenCreatingANewArrayAndCopyingValues_thenGetTheExpectedResult() {
int[] array = new int[] { 42, 2, 0, 3, 4, 0 };
int[] result = new int[array.length];
int idx = 0;
for (int n : array) {
if (n != 0) {
result[idx++] = n;
}
}
assertArrayEquals(EXPECTED, result);
}
@Test
void whenMovingZeroInTheOriginalArray_thenGetTheExpectedResult() {
int[] array = new int[] { 42, 2, 0, 3, 4, 0 };
int idx = 0;
for (int n : array) {
if (n != 0) {
array[idx++] = n;
}
}
while (idx < array.length) {
array[idx++] = 0;
}
assertArrayEquals(EXPECTED, array);
}
}

View File

@ -2,3 +2,4 @@
### Relevant Articles:
- [Why wait() Requires Synchronization?](https://www.baeldung.com/java-wait-necessary-synchronization)
- [Working with Exceptions in Java CompletableFuture](https://www.baeldung.com/java-exceptions-completablefuture)
- [CountDownLatch vs. Semaphore](https://www.baeldung.com/java-countdownlatch-vs-semaphore)

View File

@ -0,0 +1,65 @@
package com.baeldung.datetounixtimestamp;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import org.joda.time.DateTime;
import org.junit.jupiter.api.Test;
class DateToUnixTimeStampUnitTest {
@Test
void givenDate_whenUsingInstantClass_thenConvertToUnixTimeStamp() {
Instant givenDate = Instant.parse("2020-09-08T12:16:40Z");
assertEquals(1599567400L, givenDate.getEpochSecond());
}
@Test
void givenDate_whenUsingLocalDateTimeClass_thenConvertToUnixTimeStamp() {
LocalDateTime givenDate = LocalDateTime.of(2023, 10, 19, 22, 45);
assertEquals(1697755500L, givenDate.toEpochSecond(ZoneOffset.UTC));
}
@Test
void givenDate_whenUsingDateClass_thenConvertToUnixTimeStamp() throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date givenDate = dateFormat.parse("2023-10-15 22:00:00");
assertEquals(1697407200L, givenDate.getTime() / 1000);
}
@Test
void givenDate_whenUsingCalendarClass_thenConvertToUnixTimeStamp() {
Calendar calendar = new GregorianCalendar(2023, Calendar.OCTOBER, 17);
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
assertEquals(1697500800L, calendar.getTimeInMillis() / 1000);
}
@Test
void givenDate_whenUsingJodaTimeInstantClass_thenConvertToUnixTimeStamp() {
org.joda.time.Instant givenDate = org.joda.time.Instant.parse("2020-09-08T12:16:40Z");
assertEquals(1599567400L, givenDate.getMillis() / 1000);
}
@Test
void givenDate_whenUsingJodaTimeDateTimeClass_thenConvertToUnixTimeStamp() {
DateTime givenDate = new DateTime("2020-09-09T12:16:40Z");
assertEquals(1599653800L, givenDate.getMillis() / 1000);
}
}

View File

@ -4,3 +4,4 @@ This module contains articles about converting between Java date and time object
### Relevant Articles:
- [Convert Gregorian to Hijri Date in Java](https://www.baeldung.com/java-date-gregorian-hijri-conversion)
- [Convert String Date to XMLGregorianCalendar in Java](https://www.baeldung.com/java-string-date-xmlgregoriancalendar-conversion)

View File

@ -8,5 +8,6 @@ This module contains articles about core Java input and output (IO)
- [Difference Between ZipFile and ZipInputStream in Java](https://www.baeldung.com/java-zipfile-vs-zipinputstream)
- [How to Write Strings to OutputStream in Java](https://www.baeldung.com/java-write-string-outputstream)
- [Read a File and Split It Into Multiple Files in Java](https://www.baeldung.com/java-read-file-split-into-several)
- [Read and Write Files in Java Using Separate Threads](https://www.baeldung.com/java-read-write-files-different-threads)
- [[<-- Prev]](/core-java-modules/core-java-io-4)

View File

@ -0,0 +1,21 @@
package com.baeldung.objectmutability;
public final class ImmutablePerson {
private final String name;
private final int age;
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}

View File

@ -0,0 +1,33 @@
package com.baeldung.objectmutability;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
public class ImmutableObjectExamplesUnitTest {
@Test
public void givenImmutableString_whenConcatString_thenNotSameAndCorrectValues() {
String originalString = "Hello";
String modifiedString = originalString.concat(" World");
assertNotSame(originalString, modifiedString);
assertEquals("Hello", originalString);
assertEquals("Hello World", modifiedString);
}
@Test
public void givenImmutableInteger_whenAddInteger_thenNotSameAndCorrectValue() {
Integer immutableInt = 42;
Integer modifiedInt = immutableInt + 8;
assertNotSame(immutableInt, modifiedInt);
assertEquals(42, (int) immutableInt);
assertEquals(50, (int) modifiedInt);
}
}

View File

@ -0,0 +1,17 @@
package com.baeldung.objectmutability;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class ImmutablePersonUnitTest {
@Test
public void givenImmutablePerson_whenAccessFields_thenCorrectValues() {
ImmutablePerson person = new ImmutablePerson("John", 30);
assertEquals("John", person.getName());
assertEquals(30, person.getAge());
}
}

View File

@ -0,0 +1,28 @@
package com.baeldung.objectmutability;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MutableObjectExamplesUnitTest {
@Test
public void givenMutableString_whenAppendElement_thenCorrectValue() {
StringBuilder mutableString = new StringBuilder("Hello");
mutableString.append(" World");
assertEquals("Hello World", mutableString.toString());
}
@Test
public void givenMutableList_whenAddElement_thenCorrectSize() {
List<String> mutableList = new ArrayList<>();
mutableList.add("Java");
assertEquals(1, mutableList.size());
}
}

View File

@ -5,3 +5,4 @@
- [Download a Webpage in Java](https://www.baeldung.com/java-download-webpage)
- [URL Query Manipulation in Java](https://www.baeldung.com/java-url-query-manipulation)
- [Understanding the java.net.SocketException Broken Pipe Error](https://www.baeldung.com/java-socketexception-broken-pipe-error)
- [Normalize a URL in Java](https://www.baeldung.com/java-url-normalization)

View File

@ -2,3 +2,4 @@
- [Check if a double Is an Integer in Java](https://www.baeldung.com/java-check-double-integer)
- [Print a Double Value Without Scientific Notation in Java](https://www.baeldung.com/java-print-double-number-no-scientific-notation)
- [Check if a Float Value is Equivalent to an Integer Value in Java](https://www.baeldung.com/java-float-integer-equal)
- [Generating Unique Positive Long Using SecureRandom in Java](https://www.baeldung.com/java-securerandom-generate-positive-long)

View File

@ -0,0 +1,18 @@
package com.baeldung.securerandompositivelong;
import org.junit.jupiter.api.Test;
import java.security.SecureRandom;
import static org.assertj.core.api.Assertions.assertThat;
public class SecureRandomPositiveLongUnitTest {
@Test
void whenGenerateRandomPositiveLong_thenGetPositiveValue() {
SecureRandom secureRandom = new SecureRandom();
long randomPositiveLong = Math.abs(secureRandom.nextLong());
assertThat(randomPositiveLong).isNotNegative();
}
}

View File

@ -6,3 +6,5 @@ This module contains articles about performance of Java applications
- [External Debugging With JMXTerm](https://www.baeldung.com/java-jmxterm-external-debugging)
- [Create and Detect Memory Leaks in Java](https://www.baeldung.com/java-create-detect-memory-leaks)
- [Differences Between Heap Dump, Thread Dump and Core Dump](https://www.baeldung.com/java-heap-thread-core-dumps)
- [Shutting Down on OutOfMemoryError in Java](https://www.baeldung.com/java-shutting-down-outofmemoryerror)

View File

@ -1,2 +1,3 @@
### Relevant Articles:
- [Is Java Reflection Bad Practice?](https://www.baeldung.com/java-reflection-benefits-drawbacks)
- [Instantiate an Inner Class With Reflection in Java](https://www.baeldung.com/java-reflection-instantiate-inner-class)

View File

@ -5,3 +5,4 @@ This module contains articles about string-related algorithms.
### Relevant Articles:
- [Rotating a Java String By n Characters](https://www.baeldung.com/java-rotate-string-by-n-characters)
- [Remove Characters From a String That Are in the Other String](https://www.baeldung.com/java-strings-character-difference)
- [Run-Length Encoding and Decoding in Java](https://www.baeldung.com/java-rle-compression)

View File

@ -7,3 +7,4 @@
- [Generate the Same UUID From a String in Java](https://www.baeldung.com/java-generate-same-uuid-from-string)
- [Generating Time Based UUIDs](https://www.baeldung.com/java-generating-time-based-uuids)
- [Generating Unique Positive long Using UUID in Java](https://www.baeldung.com/java-uuid-unique-long-generation)
- [Storing UUID as Base64 String in Java](https://www.baeldung.com/java-store-uuid-base64-string)

View File

@ -60,6 +60,7 @@
<module>core-java-methods</module>
<module>core-java-networking-3</module>
<module>core-java-os</module>
<module>core-java-os-2</module>
<module>core-java-perf-2</module>
<module>core-java-streams-4</module>
<module>core-java-streams-5</module>

View File

@ -55,14 +55,12 @@
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<properties>

View File

@ -14,14 +14,12 @@
<artifactId>avaje-inject</artifactId>
<version>${avaje.inject.version}</version>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-test</artifactId>
<version>${avaje.inject.version}</version>
<scope>test</scope>
</dependency>
<!-- Annotation processors -->
<dependency>
<groupId>io.avaje</groupId>

View File

@ -1,8 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>k8s-operator</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>k8s-operator</name>
<packaging>jar</packaging>
<parent>
<groupId>com.baeldung</groupId>
@ -11,30 +15,12 @@
<relativePath>./../../parent-boot-3</relativePath>
</parent>
<artifactId>k8s-operator</artifactId>
<version>0.1.0-SNAPSHOT</version>
<name>k8s-operator</name>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<josdk.version>4.6.0</josdk.version>
<fabric8-client.version>6.9.2</fabric8-client.version>
<bouncycastle.version>1.77</bouncycastle.version>
<slf4j.version>2.0.9</slf4j.version>
<operator-framework-spring-boot.version>5.4.0</operator-framework-spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>operator-framework-spring-boot-starter</artifactId>
<version>${operator-framework-spring-boot.version}</version>
</dependency>
<dependency>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>operator-framework-spring-boot-starter-test</artifactId>
@ -47,49 +33,42 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.fabric8</groupId>
<artifactId>crd-generator-apt</artifactId>
<version>${fabric8-client.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
@ -108,4 +87,14 @@
</plugins>
</build>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<josdk.version>4.6.0</josdk.version>
<fabric8-client.version>6.9.2</fabric8-client.version>
<bouncycastle.version>1.77</bouncycastle.version>
<slf4j.version>2.0.9</slf4j.version>
<operator-framework-spring-boot.version>5.4.0</operator-framework-spring-boot.version>
</properties>
</project>

View File

@ -18,7 +18,7 @@
<module>k8s-admission-controller</module>
<module>kubernetes-spring</module>
<module>k8s-java-heap-dump</module>
<module>k8s-operator</module>
<module>k8s-operator</module>
</modules>
</project>

View File

@ -167,7 +167,6 @@
</resources>
</build>
<properties>
<jcabi-aspects.version>0.22.6</jcabi-aspects.version>
<aspectjrt.version>1.9.20.1</aspectjrt.version>

View File

@ -41,6 +41,7 @@
<version>${asm.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>logging-techniques</artifactId>
<parent>
<artifactId>logging-modules</artifactId>
<groupId>com.baeldung</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>logging-techniques</artifactId>
<dependencies>
<dependency>

View File

@ -55,6 +55,7 @@
<version>${validation-api.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
@ -82,6 +83,7 @@
</plugin>
</plugins>
</build>
<properties>
<openapi.version>7.1.0</openapi.version>
<gson.version>2.10.1</gson.version>

View File

@ -14,15 +14,21 @@
<version>0.0.1-SNAPSHOT</version>
</parent>
<properties>
<surefire-version>2.22.2</surefire-version>
</properties>
<modules>
<module>dummy-surefire-junit47</module>
<module>core-java-exclusions</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
@ -57,14 +63,8 @@
</pluginManagement>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<surefire-version>2.22.2</surefire-version>
</properties>
</project>

View File

@ -5,11 +5,13 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>patient-data</artifactId>
<name>patient-data</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>maven-reactor</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.baeldung</groupId>
@ -17,4 +19,5 @@
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@ -5,9 +5,11 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>patient-domain</artifactId>
<name>patient-domain</name>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>maven-reactor</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
</project>

View File

@ -8,11 +8,13 @@
<name>maven-reactor</name>
<packaging>pom</packaging>
<description>Sample multi-module project to explain maven reactor</description>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>maven-modules</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modules>
<module>patient-web</module>
<module>patient-data</module>

View File

@ -8,6 +8,7 @@
<version>1.0-SNAPSHOT</version>
<name>resume-from</name>
<packaging>pom</packaging>
<modules>
<module>business</module>
<module>lib</module>

View File

@ -10,4 +10,7 @@ This is an example project showing how to build event driven applications using
```shell
docker run --init -p 8080:8080 -p 1234:5000 conductoross/conductor-standalone:3.15.0
```
```
### Relevant Articles
- [Event-Driven Microservices With Orkes Conductor](https://www.baeldung.com/orkes-conductor-guide)

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung</groupId>
<artifactId>micronaut-reactive</artifactId>
@ -13,17 +14,6 @@
<version>4.1.2</version>
<relativePath/>
</parent>
<properties>
<packaging>jar</packaging>
<jdk.version>17</jdk.version>
<release.version>17</release.version>
<micronaut.runtime>netty</micronaut.runtime>
<micronaut.aot.enabled>false</micronaut.aot.enabled>
<micronaut.aot.packageName>com.baeldung.aot.generated</micronaut.aot.packageName>
<micronaut.test.resources.enabled>true</micronaut.test.resources.enabled>
<exec.mainClass>com.baeldung.micronautreactive.Application</exec.mainClass>
<micronaut-test-resources-testcontainers.version>2.1.0</micronaut-test-resources-testcontainers.version>
</properties>
<repositories>
<repository>
@ -111,6 +101,7 @@
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
@ -197,4 +188,16 @@
</plugins>
</build>
<properties>
<packaging>jar</packaging>
<jdk.version>17</jdk.version>
<release.version>17</release.version>
<micronaut.runtime>netty</micronaut.runtime>
<micronaut.aot.enabled>false</micronaut.aot.enabled>
<micronaut.aot.packageName>com.baeldung.aot.generated</micronaut.aot.packageName>
<micronaut.test.resources.enabled>true</micronaut.test.resources.enabled>
<exec.mainClass>com.baeldung.micronautreactive.Application</exec.mainClass>
<micronaut-test-resources-testcontainers.version>2.1.0</micronaut-test-resources-testcontainers.version>
</properties>
</project>

View File

@ -10,9 +10,9 @@
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<artifactId>parent-boot-3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-boot-2</relativePath>
<relativePath>../../parent-boot-3</relativePath>
</parent>
<dependencies>
@ -63,7 +63,7 @@
</build>
<properties>
<flyway-maven-plugin.version>10.2.0</flyway-maven-plugin.version>
<flyway-maven-plugin.version>10.7.1</flyway-maven-plugin.version>
</properties>
</project>

View File

@ -28,7 +28,7 @@
<version>${org.springframework.data.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate-core.version}</version>
</dependency>
@ -48,12 +48,12 @@
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-testing</artifactId>
<version>${hibernate-core.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>${hibernate-core.version}</version>
</dependency>
@ -87,7 +87,7 @@
<!-- Spring -->
<org.springframework.version>6.0.6</org.springframework.version>
<org.springframework.data.version>3.0.3</org.springframework.data.version>
<hibernate-core.version>6.1.7.Final</hibernate-core.version>
<hibernate-core.version>6.4.2.Final</hibernate-core.version>
<maven.deploy.skip>true</maven.deploy.skip>
<tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version>
<hypersistance-utils-hibernate-60.version>3.3.1</hypersistance-utils-hibernate-60.version>

View File

@ -1,7 +1,12 @@
package com.baeldung.hibernate.customtypes;
import org.hibernate.dialect.Dialect;
import org.hibernate.tool.schema.extract.spi.ColumnTypeInformation;
import org.hibernate.type.BasicType;
import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.ImmutableMutabilityPlan;
import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators;
import org.hibernate.type.spi.TypeConfiguration;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@ -48,4 +53,9 @@ public class LocalDateStringJavaDescriptor extends AbstractArrayTypeDescriptor<L
throw unknownWrap(value.getClass());
}
@Override
public BasicType<?> resolveType(TypeConfiguration typeConfiguration, Dialect dialect, BasicType basicType, ColumnTypeInformation columnTypeInformation, JdbcTypeIndicators jdbcTypeIndicators) {
return null;
}
}

View File

@ -0,0 +1,59 @@
package com.baeldung.hibernate.softdelete.model;
import java.util.List;
import org.hibernate.annotations.SoftDelete;
import org.hibernate.annotations.SoftDeleteType;
import org.hibernate.type.YesNoConverter;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.NamedNativeQueries;
import jakarta.persistence.NamedNativeQuery;
@Entity
@NamedNativeQueries({
@NamedNativeQuery(name = "getDeletedPerson", query = "SELECT id, name FROM SoftDeletePerson sdp where sdp.deleted = true", resultClass = SoftDeletePerson.class) })
@SoftDelete
public class SoftDeletePerson {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String name;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "Emails", joinColumns = @JoinColumn(name = "id"))
@Column(name = "emailId")
@SoftDelete(strategy = SoftDeleteType.ACTIVE, converter = YesNoConverter.class)
private List<String> emailIds;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getEmailIds() {
return emailIds;
}
public void setEmailIds(List<String> emailIds) {
this.emailIds = emailIds;
}
@Override
public String toString() {
return "SoftDeletePerson{" + "id=" + id + ", name='" + name + '\'' + ", emailIds=" + emailIds + '}';
}
}

View File

@ -0,0 +1,110 @@
package com.baeldung.hibernate.softdelete;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.ArrayList;
import java.util.List;
import org.h2.Driver;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.service.ServiceRegistry;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import com.baeldung.hibernate.softdelete.model.SoftDeletePerson;
public class SoftDeletePersonIntegrationTest {
private static SessionFactory sessionFactory;
private static Session session;
SoftDeletePerson person1 = new SoftDeletePerson();
SoftDeletePerson person2 = new SoftDeletePerson();
@BeforeAll
public static void beforeTests() {
Configuration configuration = new Configuration().addAnnotatedClass(SoftDeletePerson.class)
.setProperty("hibernate.dialect", H2Dialect.class.getName())
.setProperty("hibernate.connection.driver_class", Driver.class.getName())
.setProperty("hibernate.connection.url", "jdbc:h2:mem:test")
.setProperty("hibernate.connection.username", "sa")
.setProperty("hibernate.connection.password", "")
.setProperty("hibernate.hbm2ddl.auto", "update")
.setProperty("hibernate.show_sql", "true");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
@BeforeEach
public void setup() {
session = sessionFactory.openSession();
session.beginTransaction();
SoftDeletePerson person1 = new SoftDeletePerson();
person1.setName("Person1");
List<String> emailIds = new ArrayList<>();
emailIds.add("id1@dummy.com");
emailIds.add("id2@dummy.com");
person1.setEmailIds(emailIds);
SoftDeletePerson person2 = new SoftDeletePerson();
person2.setName("Person2");
List<String> emailIdsPerson2 = new ArrayList<>();
emailIdsPerson2.add("person2Id1@dummy.com");
emailIdsPerson2.add("person2Id2@dummy.com");
person2.setEmailIds(emailIdsPerson2);
session.save(person1);
session.save(person2);
session.getTransaction()
.commit();
assertNotNull(person1.getName());
assertNotNull(person2.getName());
System.out.println(person1);
System.out.println(person2);
}
@Test
void whenDeletingUsingSoftDelete_ThenEntityAndCollectionAreDeleted() {
session.beginTransaction();
person1 = session.createQuery("from SoftDeletePerson where name='Person1'", SoftDeletePerson.class)
.getSingleResult();
person2 = session.createQuery("from SoftDeletePerson where name='Person2'", SoftDeletePerson.class)
.getSingleResult();
assertNotNull(person1);
assertNotNull(person2);
session.delete(person2);
List<String> emailIds = person1.getEmailIds();
emailIds.remove(0);
person1.setEmailIds(emailIds);
session.save(person1);
session.getTransaction()
.commit();
List<SoftDeletePerson> activeRows = session.createQuery("from SoftDeletePerson")
.list();
List<SoftDeletePerson> deletedRows = session.createNamedQuery("getDeletedPerson", SoftDeletePerson.class)
.getResultList();
session.close();
assertNotNull(person1.getName());
System.out.println("-------------Active Rows-----------");
activeRows.forEach(row -> System.out.println(row));
System.out.println("-------------Deleted Rows-----------");
deletedRows.forEach(row -> System.out.println(row));
}
@AfterAll
static void afterTests() {
sessionFactory.close();
}
}

View File

@ -27,7 +27,7 @@
<version>${org.springframework.data.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
@ -65,6 +65,7 @@
<tomcat-dbcp.version>9.0.0.M26</tomcat-dbcp.version>
<com.sun.xml.version>4.0.2</com.sun.xml.version>
<h2.version>2.1.214</h2.version>
<hibernate.version>6.4.2.Final</hibernate.version>
</properties>
</project>

View File

@ -80,7 +80,7 @@
<properties>
<h2.version>2.1.214</h2.version> <!-- needs to be specified as it fails with parent's 1.4.200 -->
<hibernate.version>6.1.7.Final</hibernate.version>
<hibernate.version>6.4.2.Final</hibernate.version>
<hibernate-types.version>2.21.1</hibernate-types.version>
<hibernate-validator.version>8.0.1.Final</hibernate-validator.version>
<org.glassfish.javax.el.version>3.0.1-b11</org.glassfish.javax.el.version>

View File

@ -45,7 +45,7 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
@ -92,6 +92,19 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<org.springframework.version>6.0.6</org.springframework.version>
<org.springframework.data.version>3.0.3</org.springframework.data.version>
@ -99,7 +112,7 @@
<mysql.version>8.2.0</mysql.version>
<mariaDB4j.version>2.6.0</mariaDB4j.version>
<h2.version>2.1.214</h2.version>
<hibernate.version>6.3.1.Final</hibernate.version>
<hibernate.version>6.4.2.Final</hibernate.version>
<testcontainers.mysql.version>1.17.6</testcontainers.mysql.version>
</properties>

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung</groupId>
<artifactId>java-harperdb</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>

View File

@ -8,16 +8,14 @@
<version>0.0.1-SNAPSHOT</version>
<name>scylladb</name>
<description>Sample ScyllaDB Project</description>
<properties>
<testcontainers.version>1.17.6</testcontainers.version>
<spring-boot.repackage.skip>true</spring-boot.repackage.skip>
</properties>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-boot-3</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -85,4 +83,9 @@
</plugins>
</build>
<properties>
<testcontainers.version>1.17.6</testcontainers.version>
<spring-boot.repackage.skip>true</spring-boot.repackage.skip>
</properties>
</project>

View File

@ -59,7 +59,6 @@
</plugins>
</build>
<properties>
<spring.boot.dependencies>3.2.2</spring.boot.dependencies>
<org.slf4j.version>2.0.9</org.slf4j.version>

View File

@ -57,6 +57,17 @@
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>${modelmapper.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
@ -76,6 +87,8 @@
<db.util.version>1.0.7</db.util.version>
<hypersistence-utils.version>3.7.0</hypersistence-utils.version>
<jackson.version>2.16.0</jackson.version>
<modelmapper.version>3.2.0</modelmapper.version>
<lombok.version>1.18.30</lombok.version>
</properties>
</project>

View File

@ -4,8 +4,10 @@ import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class GroupService {
private final GroupRepository groupRepository;

View File

@ -4,8 +4,10 @@ import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class GroupService {
private final GroupRepository groupRepository;

View File

@ -4,8 +4,10 @@ import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class GroupService {
private final GroupRepository groupRepository;
@ -27,3 +29,4 @@ public class GroupService {
groupRepository.save(group);
}
}

View File

@ -0,0 +1,13 @@
package com.baeldung.paging;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class PagingApplication {
public static void main(String[] args) {
SpringApplication.run(PagingApplication.class, args);
}
}

View File

@ -0,0 +1,31 @@
package com.baeldung.paging;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "school")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class School {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "school_id")
private Integer id;
private String name;
}

View File

@ -0,0 +1,42 @@
package com.baeldung.paging;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.NamedAttributeNode;
import jakarta.persistence.NamedEntityGraph;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "student")
@NamedEntityGraph(name = "Student.school", attributeNodes = @NamedAttributeNode("school"))
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class Student {
@Id
@Column(name = "student_id")
private String id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "school_id", referencedColumnName = "school_id")
private School school;
}

View File

@ -0,0 +1,14 @@
package com.baeldung.paging;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface StudentCustomQueryRepository extends JpaRepository<Student, String> {
@Query(value = "SELECT stu FROM Student stu LEFT JOIN FETCH stu.school ",
countQuery = "SELECT COUNT(stu) FROM Student stu")
Page<Student> findAll(Pageable pageable);
}

View File

@ -0,0 +1,22 @@
package com.baeldung.paging;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class StudentDTO {
private String id;
private String firstName;
private String lastName;
}

View File

@ -0,0 +1,13 @@
package com.baeldung.paging;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentEntityGraphRepository extends JpaRepository<Student, String> {
@EntityGraph(attributePaths = "school")
Page<Student> findAll(Pageable pageable);
}

View File

@ -0,0 +1,13 @@
package com.baeldung.paging;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.EntityGraph;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentNamedEntityGraphRepository extends JpaRepository<Student, String> {
@EntityGraph(value = "Student.school")
Page<Student> findAll(Pageable pageable);
}

View File

@ -0,0 +1,6 @@
package com.baeldung.paging;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRepository extends JpaRepository<Student, String> {
}

View File

@ -0,0 +1,24 @@
package com.baeldung.paging;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of = {"id"})
public class StudentWithSchoolNameDTO {
private String id;
private String firstName;
private String lastName;
private String schoolName;
}

View File

@ -0,0 +1,103 @@
package com.baeldung.paging;
import com.baeldung.listvsset.util.TestConfig;
import io.hypersistence.utils.jdbc.validator.SQLStatementCountValidator;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.transaction.annotation.Transactional;
import java.util.Comparator;
import java.util.List;
import static io.hypersistence.utils.jdbc.validator.SQLStatementCountValidator.assertSelectCount;
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
@SpringBootTest(classes = {PagingApplication.class, TestConfig.class}, properties = {
"spring.jpa.show-sql=true",
"spring.jpa.properties.hibernate.format_sql=true",
"spring.jpa.generate-ddl=true",
"spring.jpa.defer-datasource-initialization=true",
"spring.sql.init.data-locations=classpath:school-student-data.sql"
})
@Transactional
class StudentRepositoryIntegrationTest {
@Autowired
private StudentRepository studentRepository;
@Autowired
private StudentCustomQueryRepository studentCustomQueryRepository;
@Autowired
private StudentEntityGraphRepository studentEntityGraphRepository;
@Autowired
private StudentNamedEntityGraphRepository studentNamedEntityGraphRepository;
private static final ModelMapper modelMapper = new ModelMapper();
@BeforeEach
void setUp() {
SQLStatementCountValidator.reset();
}
@Test
public void whenGetStudentsWithPageRequestOfTwo_thenReturnTwoRows() {
int rows = 2;
Pageable pageable = PageRequest.of(0, rows);
Page<Student> studentPage = studentRepository.findAll(pageable);
// Then
List<Student> studentList = studentPage.getContent();
assertThat(studentList.size()).isEqualTo(rows);
}
@Test
public void whenGetStudentsWithUnpagedAndSort_thenReturnAllResultsSorted() {
Sort sort = Sort.by(Sort.Direction.ASC, "lastName");
Pageable pageable = PageRequest.of(0, Integer.MAX_VALUE).withSort(sort);
Page<Student> studentPage = studentRepository.findAll(pageable);
// Then
List<Student> studentList = studentPage.getContent();
assertThat(studentList.size()).isEqualTo(studentPage.getTotalElements());
assertThat(studentList).isSortedAccordingTo(Comparator.comparing(Student::getLastName));
}
@Test
public void whenGetStudentsWithSchool_thenMultipleSelectQueriesAreExecuted() {
Page<Student> studentPage = studentRepository.findAll(Pageable.unpaged());
studentPage.get().map(student -> modelMapper.map(student, StudentWithSchoolNameDTO.class)).toList();
assertSelectCount(studentPage.getContent().size() + 1);
}
@Test
public void whenGetStudentsByCustomQuery_thenOneSelectQueryIsExecuted() {
Page<Student> studentPage = studentCustomQueryRepository.findAll(Pageable.unpaged());
studentPage.get().map(student -> modelMapper.map(student, StudentWithSchoolNameDTO.class)).toList();
assertSelectCount(1);
}
@Test
public void whenGetStudentsByEntityGraph_thenOneSelectQueryIsExecuted() {
Page<Student> studentPage = studentEntityGraphRepository.findAll(Pageable.unpaged());
studentPage.get().map(student -> modelMapper.map(student, StudentWithSchoolNameDTO.class)).toList();
assertSelectCount(1);
}
@Test
public void whenGetStudentsByNamedEntityGraph_thenOneSelectQueryIsExecuted() {
Page<Student> studentPage = studentNamedEntityGraphRepository.findAll(Pageable.unpaged());
studentPage.get().map(student -> modelMapper.map(student, StudentWithSchoolNameDTO.class)).toList();
assertSelectCount(1);
}
}

View File

@ -0,0 +1,9 @@
INSERT INTO school (name) VALUES ('Ada Lovelace CE High School');
INSERT INTO school (name) VALUES ('Ealing Fields High School');
INSERT INTO school (name) VALUES ('Northolt High School');
INSERT INTO school (name) VALUES ('Villiers High School');
INSERT INTO student(student_id, first_name, last_name, school_id) VALUES('23056746', 'James', 'Drover', 1);
INSERT INTO student(student_id, first_name, last_name, school_id) VALUES('23056751', 'Rubin', 'Webber', 2);
INSERT INTO student(student_id, first_name, last_name, school_id) VALUES('23063444', 'Sarah', 'Pelham', 3);
INSERT INTO student(student_id, first_name, last_name, school_id) VALUES('23065783', 'Lucy', 'Watson', 4);

View File

@ -5,23 +5,8 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-data-jpa-query-3</artifactId>
<name>spring-data-jpa-query-3</name>
<properties>
<javafaker.version>0.15</javafaker.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>
</plugins>
</build>
<parent>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<version>0.0.1-SNAPSHOT</version>
@ -52,10 +37,27 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<scope>test</scope>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<javafaker.version>0.15</javafaker.version>
</properties>
</project>

View File

@ -8,9 +8,9 @@
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<artifactId>parent-boot-3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-boot-2</relativePath>
<relativePath>../../parent-boot-3</relativePath>
</parent>
<dependencies>

View File

@ -1,8 +1,8 @@
package com.baeldung.aggregation.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import java.util.Objects;
@Entity

View File

@ -1,8 +1,8 @@
package com.baeldung.aggregation.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import java.util.List;
import java.util.Objects;

View File

@ -1,10 +1,10 @@
package com.baeldung.boot.passenger;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import jakarta.persistence.Basic;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import java.util.Objects;
@Entity

View File

@ -2,8 +2,8 @@ package com.baeldung.boot.passenger;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import java.util.List;
@Repository

View File

@ -1,10 +1,10 @@
package com.baeldung.entitygraph.model;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
@Entity
public class Characteristic {

View File

@ -3,11 +3,11 @@ package com.baeldung.entitygraph.model;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
import javax.persistence.OneToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.NamedAttributeNode;
import jakarta.persistence.NamedEntityGraph;
import jakarta.persistence.OneToMany;
@Entity
@NamedEntityGraph(name = "Item.characteristics",

View File

@ -1,8 +1,8 @@
package com.baeldung.exists;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
/**
* @author paullatzelsperger

View File

@ -1,11 +1,11 @@
package com.baeldung.joins.model;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
@Entity
public class Department {

View File

@ -1,13 +1,13 @@
package com.baeldung.joins.model;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
@Entity
@Table(name = "joins_employee")

View File

@ -1,10 +1,10 @@
package com.baeldung.joins.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
@Entity
public class Phone {

View File

@ -12,11 +12,8 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;
import com.baeldung.boot.passenger.Passenger;
import com.baeldung.boot.passenger.PassengerRepository;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import java.util.List;
import java.util.Optional;

View File

@ -6,14 +6,15 @@ import com.baeldung.joins.model.Department;
import com.baeldung.joins.model.Phone;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.TypedQuery;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@ -30,7 +31,7 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(3);
assertThat(resultList).hasSize(2);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Accounting");
}
@ -41,7 +42,7 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(3);
assertThat(resultList).hasSize(2);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Accounting");
}
@ -52,7 +53,7 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(3);
assertThat(resultList).hasSize(2);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Accounting");
}
@ -63,7 +64,7 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(3);
assertThat(resultList).hasSize(2);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Accounting");
}
@ -74,11 +75,12 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(9);
assertThat(resultList).hasSize(3);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Management", "Infra", "Accounting", "Management", "Infra", "Accounting", "Management");
}
@Ignore
@Test
public void whenCollectionValuedAssociationIsJoined_ThenCanSelect() {
TypedQuery<Phone> query = entityManager.createQuery("SELECT ph FROM Employee e JOIN e.phones ph WHERE ph LIKE '1%'", Phone.class);
@ -116,7 +118,7 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(3);
assertThat(resultList).hasSize(2);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Accounting");
}
@ -127,7 +129,7 @@ public class JpaJoinsIntegrationTest {
List<Department> resultList = query.getResultList();
assertThat(resultList).hasSize(4);
assertThat(resultList).hasSize(3);
assertThat(resultList).extracting("name")
.containsOnly("Infra", "Accounting", "Accounting", "Management");
}

12
pom.xml
View File

@ -733,7 +733,7 @@
<module>jackson-simple</module>
<module>java-blockchain</module>
<module>java-jdi</module>
<module>java-panama</module>
<!--<module>java-panama</module>--> <!--JAVA-27339-->
<module>javafx</module>
<module>javax-sound</module>
<module>javaxval-2</module>
@ -817,6 +817,7 @@
<module>spring-5-webflux-2</module>
<module>spring-5-webflux</module>
<module>spring-5</module>
<module>spring-6-rsocket</module>
<module>spring-activiti</module>
<module>spring-actuator</module>
<module>spring-ai</module>
@ -973,7 +974,7 @@
<module>jackson-simple</module>
<module>java-blockchain</module>
<module>java-jdi</module>
<module>java-panama</module>
<!--<module>java-panama</module>--> <!--JAVA-27339-->
<module>javafx</module>
<module>javax-sound</module>
<module>javaxval-2</module>
@ -1041,6 +1042,7 @@
<module>patterns-modules</module>
<module>performance-tests</module>
<module>persistence-modules</module>
<!--<module>persistence-modules/java-harperdb</module>--> <!-- This module requires a library to download manually -->
<module>persistence-modules/spring-data-neo4j</module>
<module>protobuffer</module>
<module>quarkus-modules</module>
@ -1056,6 +1058,7 @@
<module>spring-5-webflux-2</module>
<module>spring-5-webflux</module>
<module>spring-5</module>
<module>spring-6-rsocket</module>
<module>spring-activiti</module>
<module>spring-actuator</module>
<module>spring-ai</module>
@ -1092,6 +1095,7 @@
<module>spring-jersey</module>
<module>spring-jinq</module>
<module>spring-kafka-2</module>
<module>spring-kafka-3</module>
<module>spring-kafka</module>
<module>spring-katharsis</module>
<module>spring-mobile</module>
@ -1190,8 +1194,8 @@
<exec-maven-plugin.version>3.1.0</exec-maven-plugin.version>
<java.version>1.8</java.version>
<log4j.version>1.2.17</log4j.version>
<jmh-core.version>1.36</jmh-core.version>
<jmh-generator.version>1.36</jmh-generator.version>
<jmh-core.version>1.37</jmh-core.version>
<jmh-generator.version>1.37</jmh-generator.version>
<maven-failsafe-plugin.version>3.1.2</maven-failsafe-plugin.version>
<commons-collections4.version>4.4</commons-collections4.version>
<commons-io.version>2.13.0</commons-io.version>

View File

@ -34,6 +34,7 @@
<scope>import</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
@ -48,6 +49,8 @@
<properties>
<spring-boot.version>3.1.3</spring-boot.version>
<org.slf4j.version>2.0.7</org.slf4j.version>
<logback.version>1.4.11</logback.version>
</properties>
</project>

View File

@ -28,7 +28,8 @@ public class RSocketRequestResponseIntegrationTest {
@Test
public void whenSendingStream_thenReceiveTheSameStream() {
String message = "test message";
assertEquals(message, client.sendMessage(Mono.just(message))
String response = "test message,Response!";
assertEquals(response, client.sendMessage(Mono.just(message))
.block());
}

View File

@ -3,6 +3,10 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-6</artifactId>
<name>spring-6</name>
<packaging>pom</packaging>
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-spring-6</artifactId>
@ -10,10 +14,6 @@
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>spring-6</artifactId>
<name>spring-6</name>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>

View File

@ -43,6 +43,7 @@
<version>${jetty.version}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-ai</artifactId>
<name>spring-ai</name>
@ -39,14 +39,14 @@
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.baeldung.spring.ai.SpringAIProjectApplication</mainClass>
<layout>JAR</layout>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.baeldung.spring.ai.SpringAIProjectApplication</mainClass>
<layout>JAR</layout>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
@ -60,4 +60,5 @@
</plugin>
</plugins>
</build>
</project>

View File

@ -11,7 +11,6 @@
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@ -27,6 +27,7 @@
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
@ -35,4 +36,5 @@
</plugin>
</plugins>
</build>
</project>

View File

@ -57,7 +57,9 @@ public class ManagingConsumerGroupsIntegrationTest {
}
} while (currentMessage != TOTAL_PRODUCED_MESSAGES);
Thread.sleep(2000);
if( consumerService.consumedPartitions != null && consumerService.consumedPartitions.get("consumer-1") != null) {
if (consumerService.consumedPartitions != null
&& consumerService.consumedPartitions.get("consumer-1") != null
&& consumerService.consumedPartitions.get("consumer-0") != null) {
assertTrue(consumerService.consumedPartitions.get("consumer-1").size() >= 1);
assertTrue( consumerService.consumedPartitions.get("consumer-0").size() >= 1);
}

View File

@ -0,0 +1,89 @@
package com.baeldung.r2dbc;
import com.baeldung.r2dbc.model.Player;
import io.r2dbc.spi.ConnectionFactories;
import io.r2dbc.spi.ConnectionFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
import org.springframework.r2dbc.core.DatabaseClient;
import org.springframework.test.context.junit4.SpringRunner;
import reactor.core.publisher.Hooks;
import reactor.test.StepVerifier;
import java.util.Arrays;
import java.util.List;
import static org.springframework.data.relational.core.query.Criteria.where;
import static org.springframework.data.relational.core.query.Query.query;
@RunWith(SpringRunner.class)
@SpringBootTest
public class R2dbcApplicationRdbcTemplateIntegrationTest {
@Autowired
DatabaseClient client;
ConnectionFactory connectionFactory = ConnectionFactories.get("r2dbc:h2:mem:///testdb?options=DB_CLOSE_DELAY=-1;TRACE_LEVEL_FILE=4;USER=sa;PASSWORD=");
R2dbcEntityTemplate template = new R2dbcEntityTemplate(connectionFactory);
@Before
public void setup() {
Hooks.onOperatorDebug();
List<String> statements = Arrays.asList("DROP TABLE IF EXISTS player;", "CREATE table player (id INT AUTO_INCREMENT NOT NULL, name VARCHAR2, age INT NOT NULL);");
statements.forEach(it -> client.sql(it)
.fetch()
.rowsUpdated()
.as(StepVerifier::create)
.expectNextCount(1)
.verifyComplete());
}
@Test
public void whenSearchForSaka_thenOneIsExpected() {
insertPlayers();
template.select(Player.class)
.matching(query(where("name").is("Saka")))
.one()
.as(StepVerifier::create)
.expectNextCount(1)
.verifyComplete();
}
@Test
public void whenInsertThreePlayers_thenThreeAreExpected() {
insertPlayers();
template.select(Player.class)
.all()
.as(StepVerifier::create)
.expectNextCount(3)
.verifyComplete();
}
public void insertPlayers() {
List<Player> players = Arrays.asList(new Player(null, "Saka", 22), new Player(null, "Pedro", 32), new Player(null, "Mbappé", 20));
for (Player player : players) {
template.insert(Player.class)
.using(player)
.as(StepVerifier::create)
.expectNextCount(1)
.verifyComplete();
}
}
}

View File

@ -34,20 +34,16 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
@ -74,4 +70,5 @@
<java.version>21</java.version>
<spring-boot.version>3.2.0</spring-boot.version>
</properties>
</project>

View File

@ -28,7 +28,7 @@
<module>spring-security-oidc</module>
<module>spring-security-okta</module>
<module>spring-security-saml</module>
<module>spring-security-social-login</module>
<module>spring-security-social-login</module> <!-- spring-social-facebook is deprecated and not supported in latest version of spring security. JAVA-29302 -->
<module>spring-security-web-angular</module>
<module>spring-security-web-boot-1</module>
<module>spring-security-web-boot-2</module>

View File

@ -10,9 +10,9 @@
<parent>
<groupId>com.baeldung</groupId>
<artifactId>parent-boot-2</artifactId>
<artifactId>parent-boot-3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-boot-2</relativePath>
<relativePath>../../parent-boot-3</relativePath>
</parent>
<dependencies>
@ -32,8 +32,8 @@
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
@ -55,6 +55,28 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>${rest-assured.version}</version>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${jakarta.servlet-api.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
</dependencies>
<properties>
<start-class>com.baeldung.compress.SpringCompressRequestApplication</start-class>
<rest-assured.version>3.3.0</rest-assured.version>
<jakarta.servlet-api.version>6.0.0</jakarta.servlet-api.version>
<jetty.version>11.0.15</jetty.version>
</properties>
</project>

View File

@ -5,7 +5,7 @@ import com.baeldung.resttemplate.json.model.User;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
@ -64,7 +64,7 @@ public class UserConsumerServiceImpl implements UserConsumerService {
User[] userArray = responseEntity.getBody();
//we can get more info if we need :
MediaType contentType = responseEntity.getHeaders().getContentType();
HttpStatus statusCode = responseEntity.getStatusCode();
HttpStatusCode statusCode = responseEntity.getStatusCode();
return Arrays.stream(userArray)
.flatMap(user -> user.getAddressList().stream())

View File

@ -1,6 +1,6 @@
package com.baeldung.sampleapp.web.controller.redirect;
import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;

View File

@ -1,6 +1,6 @@
package com.baeldung.sampleapp.web.controller.redirect;
import javax.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

View File

@ -6,7 +6,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

View File

@ -6,13 +6,10 @@ import static org.junit.Assert.assertThat;
import java.net.Proxy;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
import org.apache.http.protocol.HttpContext;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.routing.DefaultProxyRoutePlanner;
import org.apache.hc.core5.http.HttpHost;
import org.junit.Before;
import org.junit.Test;
import org.springframework.boot.web.client.RestTemplateBuilder;
@ -56,12 +53,7 @@ public class RestTemplateCustomizerLiveTest {
public void customize(RestTemplate restTemplate) {
HttpHost proxy = new HttpHost(PROXY_SERVER_HOST, PROXY_SERVER_PORT);
HttpClient httpClient = HttpClientBuilder.create()
.setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context) throws HttpException {
return super.determineProxy(target, request, context);
}
})
.setRoutePlanner(new DefaultProxyRoutePlanner(proxy))
.build();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}

View File

@ -55,7 +55,9 @@ public class RedirectControllerIntegrationTest {
@Test
public void whenRedirectOnUrlWithUsingRedirectView_thenStatusRedirectionAndRedirectedOnUrlAndAddedAttributeToFlashScope() throws Exception {
mockMvc.perform(get("/redirectWithRedirectView")).andExpect(status().is3xxRedirection()).andExpect(model().attribute("attribute", equalTo("redirectWithRedirectView"))).andExpect(redirectedUrl("redirectedUrl?attribute=redirectWithRedirectView"));
mockMvc.perform(get("/redirectWithRedirectView"))
.andExpect(status().is3xxRedirection())
.andExpect(redirectedUrl("redirectedUrl"));
}
@Test

View File

@ -10,3 +10,4 @@ This module contains articles about Mockito
- [How to Mock Constructors for Unit Testing using Mockito](https://www.baeldung.com/java-mockito-constructors-unit-testing)
- [Overview of Mockito MockedConstruction](https://www.baeldung.com/java-mockito-mockedconstruction)
- [Verify That Lambda Expression Was Called Using Mockito](https://www.baeldung.com/java-mockito-verify-lambda-expression)
- [Injecting @Mock and @Captor in JUnit 5 Method Parameters](https://www.baeldung.com/junit-5-mock-captor-method-parameter-injection)

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baeldung.spring-boot-modules</groupId>
<artifactId>java-takes</artifactId>
@ -12,8 +12,6 @@
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.takes</groupId>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>rome</artifactId>
<version>0.1-SNAPSHOT</version>
@ -13,8 +13,6 @@
<version>1.0.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>rome</groupId>
@ -23,7 +21,6 @@
</dependency>
</dependencies>
<properties>
<rome.version>1.0</rome.version>
</properties>