├── .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 [![Twitter](https://img.shields.io/twitter/follow/piotr_minkowski.svg?style=social&logo=twitter&label=Follow%20Me)](https://twitter.com/piotr_minkowski) 2 | 3 | [![CircleCI](https://circleci.com/gh/piomin/sample-docker-microservice.svg?style=svg)](https://circleci.com/gh/piomin/sample-docker-microservice) 4 | 5 | [![SonarCloud](https://sonarcloud.io/images/project_badges/sonarcloud-black.svg)](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice) 6 | [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=piomin_sample-docker-microservice&metric=bugs)](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice) 7 | [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=piomin_sample-docker-microservice&metric=coverage)](https://sonarcloud.io/dashboard?id=piomin_sample-docker-microservice) 8 | [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=piomin_sample-docker-microservice&metric=ncloc)](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 | --------------------------------------------------------------------------------