├── .circleci
└── config.yml
├── .gitignore
├── README.md
├── pom.xml
├── quarkus-microservice
├── Dockerfile
├── Dockerfile_alpaquita
├── Dockerfile_full
├── pom.xml
└── src
│ ├── main
│ ├── docker
│ │ └── Dockerfile.jvm
│ ├── java
│ │ └── pl
│ │ │ └── piomin
│ │ │ └── microservices
│ │ │ └── quarkus
│ │ │ ├── Person.java
│ │ │ └── PersonResource.java
│ └── resources
│ │ └── application.properties
│ └── test
│ └── java
│ └── pl
│ └── piomin
│ └── microservices
│ └── quarkus
│ └── PersonResourceTests.java
├── renovate.json
└── spring-microservice
├── Dockerfile
├── Dockerfile_alpaquita
├── Dockerfile_temurin
├── pom.xml
└── src
├── main
├── java
│ └── pl
│ │ └── piomin
│ │ └── microservices
│ │ └── spring
│ │ ├── Api.java
│ │ ├── Application.java
│ │ └── Person.java
└── resources
│ └── application.yml
└── test
└── java
└── pl
└── piomin
└── microservices
└── spring
├── ApiTests.java
└── MyAppTests.java
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | version: 2.1
2 |
3 | jobs:
4 | build:
5 | docker:
6 | - image: 'cimg/openjdk:21.0.6'
7 | steps:
8 | - checkout
9 | - run:
10 | name: Analyze on SonarCloud
11 | command: mvn verify sonar:sonar
12 |
13 | executors:
14 | jdk:
15 | docker:
16 | - image: 'cimg/openjdk:21.0.6'
17 |
18 | orbs:
19 | maven: circleci/maven@2.0.0
20 |
21 | workflows:
22 | maven_test:
23 | jobs:
24 | - maven/test:
25 | executor: jdk
26 | - build:
27 | context: SonarCloud
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /.project
2 | /.settings/
3 | /target/
4 | /.classpath
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Demo for Comparison Between Spring Boot and Quarkus [](https://twitter.com/piotr_minkowski)
2 |
3 | [](https://circleci.com/gh/piomin/sample-docker-microservice)
4 |
5 | [](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice)
6 | [](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice)
7 | [](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice)
8 | [](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice)
9 |
10 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | pl.piomin.microservices
6 | sample-docker-microservice
7 | pom
8 | 1.0-SNAPSHOT
9 |
10 |
11 | quarkus-microservice
12 | spring-microservice
13 |
14 |
15 |
16 | piomin_sample-docker-microservice
17 | piomin
18 | https://sonarcloud.io
19 |
20 |
--------------------------------------------------------------------------------
/quarkus-microservice/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:latest AS build
2 | ENV JAVA_HOME /opt/jdk/jdk-21.0.1
3 | ENV PATH $JAVA_HOME/bin:$PATH
4 |
5 | ADD https://download.bell-sw.com/java/21.0.1+12/bellsoft-jdk21.0.1+12-linux-x64-musl.tar.gz /opt/jdk/
6 | RUN tar -xzvf /opt/jdk/bellsoft-jdk21.0.1+12-linux-x64-musl.tar.gz -C /opt/jdk/
7 | RUN ["jlink", "--compress=2", \
8 | "--module-path", "/opt/jdk/jdk-21.0.1/jmods/", \
9 | "--add-modules", "java.base,java.desktop,java.management,java.naming,java.rmi,java.sql,jdk.compiler,jdk.unsupported", \
10 | "--no-header-files", "--no-man-pages", \
11 | "--output", "/quarkus-runtime"]
12 |
13 | FROM alpine:latest
14 | COPY --from=build /quarkus-runtime /opt/jdk
15 | ENV PATH=$PATH:/opt/jdk/bin
16 | ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
17 | COPY ../target/quarkus-microservice-1.0-SNAPSHOT-runner.jar /opt/app/
18 | CMD ["java", "-showversion", "-jar", "/opt/app/quarkus-microservice-1.0-SNAPSHOT-runner.jar"]
--------------------------------------------------------------------------------
/quarkus-microservice/Dockerfile_alpaquita:
--------------------------------------------------------------------------------
1 | FROM bellsoft/liberica-runtime-container:jdk-21.0.7_9-slim-musl
2 |
3 | RUN mkdir /deployments
4 |
5 | ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
6 | # We make four distinct layers so if there are application changes the library layers can be re-used
7 |
8 | COPY target/*.jar /deployments/
9 |
10 | EXPOSE 8080
11 |
12 | ENTRYPOINT [ "java", "-jar", "/deployments/quarkus-microservice-1.0-SNAPSHOT-runner.jar" ]
--------------------------------------------------------------------------------
/quarkus-microservice/Dockerfile_full:
--------------------------------------------------------------------------------
1 | FROM openjdk:21
2 |
3 | RUN mkdir /deployments
4 |
5 | ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
6 | # We make four distinct layers so if there are application changes the library layers can be re-used
7 |
8 | COPY target/*.jar /deployments/
9 |
10 | EXPOSE 8080
11 |
12 | ENTRYPOINT [ "java", "-jar", "/deployments/quarkus-microservice-1.0-SNAPSHOT-runner.jar" ]
--------------------------------------------------------------------------------
/quarkus-microservice/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | sample-docker-microservice
7 | pl.piomin.microservices
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | quarkus-microservice
13 |
14 |
15 | 3.23.2
16 | UTF-8
17 | 21
18 | 21
19 | 3.5.3
20 | ${project.artifactId}
21 |
22 |
23 |
24 |
25 |
26 | io.quarkus
27 | quarkus-bom
28 | ${quarkus.version}
29 | pom
30 | import
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | io.quarkus
39 | quarkus-maven-plugin
40 | ${quarkus.version}
41 |
42 |
43 |
44 | build
45 | generate-code
46 | generate-code-tests
47 |
48 |
49 |
50 |
51 |
52 | maven-surefire-plugin
53 | ${surefire-plugin.version}
54 |
55 |
56 | org.jboss.logmanager.LogManager
57 |
58 |
59 |
60 |
61 |
62 | org.jacoco
63 | jacoco-maven-plugin
64 | 0.8.13
65 |
66 |
67 |
68 | prepare-agent
69 |
70 |
71 |
72 | report
73 | test
74 |
75 | report
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 | io.quarkus
86 | quarkus-resteasy-jackson
87 |
88 |
89 | io.quarkus
90 | quarkus-container-image-docker
91 |
92 |
93 | io.quarkus
94 | quarkus-junit5
95 | test
96 |
97 |
98 | io.rest-assured
99 | rest-assured
100 | test
101 |
102 |
103 |
104 |
105 |
106 | native
107 |
108 |
109 | native
110 |
111 |
112 |
113 |
114 |
115 | io.quarkus
116 | quarkus-maven-plugin
117 | ${quarkus.version}
118 |
119 |
120 |
121 | native-image
122 |
123 |
124 | true
125 |
126 |
127 |
128 |
129 |
130 | maven-failsafe-plugin
131 | 3.5.3
132 |
133 |
134 |
135 | integration-test
136 | verify
137 |
138 |
139 |
140 | ${project.build.directory}/${project.build.finalName}-runner
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/quarkus-microservice/src/main/docker/Dockerfile.jvm:
--------------------------------------------------------------------------------
1 |
2 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10-1295
3 |
4 | ARG JAVA_PACKAGE=java-17-openjdk-headless
5 | ARG RUN_JAVA_VERSION=1.3.8
6 | ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
7 | # Install java and the run-java script
8 | # Also set up permissions for user `1001`
9 | RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
10 | && microdnf update \
11 | && microdnf clean all \
12 | && mkdir /deployments \
13 | && chown 1001 /deployments \
14 | && chmod "g+rwX" /deployments \
15 | && chown 1001:root /deployments \
16 | && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
17 | && chown 1001 /deployments/run-java.sh \
18 | && chmod 540 /deployments/run-java.sh \
19 | && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security
20 |
21 | # Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
22 | ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
23 | # We make four distinct layers so if there are application changes the library layers can be re-used
24 | COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/
25 | COPY --chown=1001 target/quarkus-app/*.jar /deployments/
26 | COPY --chown=1001 target/quarkus-app/app/ /deployments/app/
27 | COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/
28 |
29 | EXPOSE 8080
30 | USER 1001
31 |
32 | ENTRYPOINT [ "/deployments/run-java.sh" ]
--------------------------------------------------------------------------------
/quarkus-microservice/src/main/java/pl/piomin/microservices/quarkus/Person.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.quarkus;
2 |
3 | public class Person {
4 |
5 | private Integer id;
6 | private String firstName;
7 | private String lastName;
8 | private int age;
9 |
10 | public Person() {
11 |
12 | }
13 |
14 | public Person(Integer id, String firstName, String lastName, int age) {
15 | this.id = id;
16 | this.firstName = firstName;
17 | this.lastName = lastName;
18 | this.age = age;
19 | }
20 |
21 | public Integer getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Integer id) {
26 | this.id = id;
27 | }
28 |
29 | public String getFirstName() {
30 | return firstName;
31 | }
32 |
33 | public void setFirstName(String firstName) {
34 | this.firstName = firstName;
35 | }
36 |
37 | public String getLastName() {
38 | return lastName;
39 | }
40 |
41 | public void setLastName(String lastName) {
42 | this.lastName = lastName;
43 | }
44 |
45 | public int getAge() {
46 | return age;
47 | }
48 |
49 | public void setAge(int age) {
50 | this.age = age;
51 | }
52 |
53 | @Override
54 | public String toString() {
55 | return "Person{" +
56 | "id=" + id +
57 | ", firstName='" + firstName + '\'' +
58 | ", lastName='" + lastName + '\'' +
59 | ", age=" + age +
60 | '}';
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/quarkus-microservice/src/main/java/pl/piomin/microservices/quarkus/PersonResource.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.quarkus;
2 |
3 | import jakarta.ws.rs.GET;
4 | import jakarta.ws.rs.Path;
5 | import jakarta.ws.rs.PathParam;
6 | import org.jboss.logging.Logger;
7 |
8 | import java.util.ArrayList;
9 | import java.util.List;
10 |
11 | @Path("/persons")
12 | public class PersonResource {
13 |
14 | private Logger log;
15 |
16 | private List persons;
17 |
18 | public PersonResource(Logger log) {
19 | this.log = log;
20 | persons = new ArrayList<>();
21 | persons.add(new Person(1, "Jan", "Kowalski", 22));
22 | persons.add(new Person(2, "Adam", "Malinowski", 33));
23 | persons.add(new Person(3, "Tomasz", "Janowski", 25));
24 | persons.add(new Person(4, "Alina", "Iksińska", 54));
25 | }
26 |
27 | @GET
28 | public List findAll() {
29 | log.info("Api.findAll()");
30 | return persons;
31 | }
32 |
33 | @GET
34 | @Path("/{id}")
35 | public Person findById(@PathParam("id") Integer id) {
36 | log.infof("Api.findById(%d)", id);
37 | return persons.stream()
38 | .filter(p -> (p.getId().intValue() == id))
39 | .findAny()
40 | .orElseThrow();
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/quarkus-microservice/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | quarkus.package.create-appcds = true
--------------------------------------------------------------------------------
/quarkus-microservice/src/test/java/pl/piomin/microservices/quarkus/PersonResourceTests.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.quarkus;
2 |
3 | import io.quarkus.test.junit.QuarkusTest;
4 | import org.junit.jupiter.api.Test;
5 |
6 | import static io.restassured.RestAssured.given;
7 | import static org.junit.jupiter.api.Assertions.assertEquals;
8 | import static org.junit.jupiter.api.Assertions.assertNotNull;
9 | import static org.hamcrest.CoreMatchers.is;
10 |
11 | @QuarkusTest
12 | public class PersonResourceTests {
13 |
14 | @Test
15 | public void findAll() {
16 | given()
17 | .when().get("/persons")
18 | .then()
19 | .statusCode(200)
20 | .assertThat().body("size()", is(4));
21 | }
22 |
23 | @Test
24 | public void findById() {
25 | Person person = given()
26 | .when().get("/persons/1")
27 | .then()
28 | .statusCode(200)
29 | .extract()
30 | .body().as(Person.class);
31 | assertNotNull(person);
32 | assertEquals(1, person.getId());
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "config:base",":dependencyDashboard"
5 | ],
6 | "packageRules": [
7 | {
8 | "matchUpdateTypes": ["minor", "patch", "pin", "digest"],
9 | "automerge": true
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/spring-microservice/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:latest AS build
2 | ENV JAVA_HOME /opt/jdk/jdk-21.0.1
3 | ENV PATH $JAVA_HOME/bin:$PATH
4 |
5 | ADD https://download.bell-sw.com/java/21.0.1+12/bellsoft-jdk21.0.1+12-linux-x64-musl.tar.gz /opt/jdk/
6 | RUN tar -xzvf /opt/jdk/bellsoft-jdk21.0.1+12-linux-x64-musl.tar.gz -C /opt/jdk/
7 | RUN ["jlink", "--compress=2", \
8 | "--module-path", "/opt/jdk/jdk-21.0.1/jmods/", \
9 | "--add-modules", "java.base,java.logging,java.naming,java.desktop,jdk.unsupported", \
10 | "--no-header-files", "--no-man-pages", \
11 | "--output", "/springboot-runtime"]
12 |
13 | FROM alpine:latest
14 | COPY --from=build /springboot-runtime /opt/jdk
15 | ENV PATH=$PATH:/opt/jdk/bin
16 | EXPOSE 8080
17 | COPY ../target/spring-microservice-1.0-SNAPSHOT.jar /opt/app/
18 | CMD ["java", "-showversion", "-jar", "/opt/app/spring-microservice-1.0-SNAPSHOT.jar"]
--------------------------------------------------------------------------------
/spring-microservice/Dockerfile_alpaquita:
--------------------------------------------------------------------------------
1 | FROM bellsoft/liberica-runtime-container:jdk-21.0.7_9-slim-musl
2 | COPY target/spring-microservice-1.0-SNAPSHOT.jar /opt/app/
3 | EXPOSE 8080
4 | CMD ["java", "-showversion", "-jar", "/opt/app/spring-microservice-1.0-SNAPSHOT.jar"]
--------------------------------------------------------------------------------
/spring-microservice/Dockerfile_temurin:
--------------------------------------------------------------------------------
1 | FROM alpine:latest AS build
2 | ENV JAVA_HOME /opt/jdk/jdk-21.0.1+12
3 | ENV PATH $JAVA_HOME/bin:$PATH
4 |
5 | ADD https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.1%2B12/OpenJDK21U-jdk_x64_alpine-linux_hotspot_21.0.1_12.tar.gz /opt/jdk/
6 | RUN tar -xzvf /opt/jdk/OpenJDK21U-jdk_x64_alpine-linux_hotspot_21.0.1_12.tar.gz -C /opt/jdk/
7 | RUN ["jlink", "--compress=2", \
8 | "--module-path", "/opt/jdk/jdk-21.0.1+12/jmods/", \
9 | "--add-modules", "java.base,java.logging,java.naming,java.desktop,jdk.unsupported", \
10 | "--no-header-files", "--no-man-pages", \
11 | "--output", "/springboot-runtime"]
12 |
13 | FROM alpine:latest
14 | COPY --from=build /springboot-runtime /opt/jdk
15 | ENV PATH=$PATH:/opt/jdk/bin
16 | EXPOSE 8080
17 | COPY ../target/spring-microservice-1.0-SNAPSHOT.jar /opt/app/
18 | CMD ["java", "-showversion", "-jar", "/opt/app/spring-microservice-1.0-SNAPSHOT.jar"]
--------------------------------------------------------------------------------
/spring-microservice/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 3.5.0
9 |
10 |
11 | 4.0.0
12 |
13 | pl.piomin.microservices
14 | spring-microservice
15 | 1.0-SNAPSHOT
16 |
17 |
18 | 21
19 | ${project.artifactId}
20 |
21 |
22 |
23 |
24 | org.springframework.boot
25 | spring-boot-starter-web
26 |
27 |
28 | org.springframework.boot
29 | spring-boot-starter-tomcat
30 |
31 |
32 |
33 |
34 | org.yaml
35 | snakeyaml
36 | 2.4
37 |
38 |
39 |
40 | org.springframework.boot
41 | spring-boot-starter-undertow
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-starter-test
46 | test
47 |
48 |
49 |
50 |
51 |
52 |
53 | org.springframework.boot
54 | spring-boot-maven-plugin
55 |
56 |
57 | quay.io/pminkows/spring-microservice:alpaquita-pack
58 | bellsoft/buildpacks.builder:musl
59 |
60 | 17
61 | true
62 | --no-man-pages --no-header-files --strip-debug --compress=2 --add-modules java.base,java.logging,java.naming,java.desktop,jdk.unsupported
63 |
64 |
65 |
66 |
67 |
68 | com.google.cloud.tools
69 | jib-maven-plugin
70 | 3.4.5
71 |
72 |
73 | piomin/sample-docker-microservice
74 |
75 |
76 |
77 |
78 | org.jacoco
79 | jacoco-maven-plugin
80 | 0.8.13
81 |
82 |
83 |
84 | prepare-agent
85 |
86 |
87 |
88 | report
89 | test
90 |
91 | report
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/spring-microservice/src/main/java/pl/piomin/microservices/spring/Api.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.spring;
2 |
3 | import org.springframework.web.bind.annotation.GetMapping;
4 | import org.springframework.web.bind.annotation.PathVariable;
5 | import org.springframework.web.bind.annotation.RequestMapping;
6 | import org.springframework.web.bind.annotation.RestController;
7 |
8 | import java.util.ArrayList;
9 | import java.util.List;
10 | import java.util.logging.Logger;
11 |
12 | @RestController
13 | @RequestMapping("/persons")
14 | public class Api {
15 |
16 | protected Logger logger = Logger.getLogger(Api.class.getName());
17 |
18 | private List persons;
19 |
20 | public Api() {
21 | persons = new ArrayList<>();
22 | persons.add(new Person(1, "Jan", "Kowalski", 22));
23 | persons.add(new Person(2, "Adam", "Malinowski", 33));
24 | persons.add(new Person(3, "Tomasz", "Janowski", 25));
25 | persons.add(new Person(4, "Alina", "Iksińska", 54));
26 | }
27 |
28 | @GetMapping
29 | public List findAll() {
30 | logger.info("Api.findAll()");
31 | return persons;
32 | }
33 |
34 | @GetMapping("/{id}")
35 | public Person findById(@PathVariable("id") Integer id) {
36 | logger.info(String.format("Api.findById(%d)", id));
37 | return persons.stream()
38 | .filter(p -> (p.getId().intValue() == id))
39 | .findAny()
40 | .orElseThrow();
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/spring-microservice/src/main/java/pl/piomin/microservices/spring/Application.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.spring;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class Application {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(Application.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/spring-microservice/src/main/java/pl/piomin/microservices/spring/Person.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.spring;
2 |
3 | public class Person {
4 |
5 | private Integer id;
6 | private String firstName;
7 | private String lastName;
8 | private int age;
9 |
10 | public Person() {
11 |
12 | }
13 |
14 | public Person(Integer id, String firstName, String lastName, int age) {
15 | this.id = id;
16 | this.firstName = firstName;
17 | this.lastName = lastName;
18 | this.age = age;
19 | }
20 |
21 | public Integer getId() {
22 | return id;
23 | }
24 |
25 | public void setId(Integer id) {
26 | this.id = id;
27 | }
28 |
29 | public String getFirstName() {
30 | return firstName;
31 | }
32 |
33 | public void setFirstName(String firstName) {
34 | this.firstName = firstName;
35 | }
36 |
37 | public String getLastName() {
38 | return lastName;
39 | }
40 |
41 | public void setLastName(String lastName) {
42 | this.lastName = lastName;
43 | }
44 |
45 | public int getAge() {
46 | return age;
47 | }
48 |
49 | public void setAge(int age) {
50 | this.age = age;
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/spring-microservice/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | spring.application.name: person-service
--------------------------------------------------------------------------------
/spring-microservice/src/test/java/pl/piomin/microservices/spring/ApiTests.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.spring;
2 |
3 | import org.junit.jupiter.api.Assertions;
4 | import org.junit.jupiter.api.Test;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.boot.test.context.SpringBootTest;
7 | import org.springframework.boot.test.web.client.TestRestTemplate;
8 |
9 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
10 | public class ApiTests {
11 |
12 | @Autowired
13 | TestRestTemplate restTemplate;
14 |
15 | @Test
16 | void findAll() {
17 | Person[] persons = restTemplate.getForObject("/persons", Person[].class);
18 | Assertions.assertTrue(persons.length > 0);
19 | }
20 |
21 | @Test
22 | void findById() {
23 | Person person = restTemplate.getForObject("/persons/{id}", Person.class, 1);
24 | Assertions.assertNotNull(person);
25 | Assertions.assertEquals(1, person.getId());
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/spring-microservice/src/test/java/pl/piomin/microservices/spring/MyAppTests.java:
--------------------------------------------------------------------------------
1 | package pl.piomin.microservices.spring;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)
7 | public class MyAppTests {
8 |
9 | @Test
10 | void example() {
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------