diff --git a/.travis.yml b/.travis.yml index 9b9bd6e..d4f921f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,8 @@ language: java -jdk: oraclejdk8 +jdk: + - openjdk8 + services: - - docker \ No newline at end of file + - docker + +script: mvn clean install diff --git a/README.md b/README.md index 32e2018..988d075 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Build Status](https://travis-ci.org/ExampleDriven/spring-boot-docker-example.svg?branch=master)](https://travis-ci.org/ExampleDriven/spring-boot-docker-example) # spring-boot-docker-example -This is the source code for the blog post +This is the source code for the blog post : https://exampledriven.wordpress.com/2016/06/24/spring-boot-docker-example/ @@ -28,6 +28,7 @@ docker-compose scale echo-service=2 ``` ## Useful docker commands + ```sh ##Starting multiple echo services docker-compose scale echo-service=3 @@ -38,14 +39,12 @@ docker-compose stop echo-service docker-compose up -d echo-service ``` -Once all the services are up, the following URLs will be available +Once all the services are up, the following URLs will be available: Address | Description --- | --- -http://<\\>:8761 | Eureka service. +http://<\\>:8761 | Eureka service http://<\\>:9090/routes | Zuul route definitions http://<\\>:9090/api/echo-service/echo | Echo service through Zuul api gateway, looked up from Eureka registry http://<\\>:9090/api/echo-service/echo/remote-echo | Echo service calling remote echo services -http://<\\>:9090/api/echo-service-by-dns/echo/remote-echo | Echo service through Zuul api gateway, located by DNS entry http://echo-service:9098 - - +http://<\\>:9090/api/echo-service-by-dns/echo/remote-echo | Echo service through Zuul api gateway, located by DNS entry http://echo-service:9098 diff --git a/echo-service/pom.xml b/echo-service/pom.xml index 448e9ff..2e4f2eb 100644 --- a/echo-service/pom.xml +++ b/echo-service/pom.xml @@ -39,6 +39,11 @@ org.springframework.boot spring-boot-devtools + + org.projectlombok + lombok + 1.18.12 + @@ -81,7 +86,9 @@ ${project.artifactId} java:8 - ["java", "-jar", "/${project.build.finalName}.jar", "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"] + ["java", "-jar", "/${project.build.finalName}.jar", "-Xdebug + -Xrunjdwp:server=y,transport=dt_socket,suspend=n"] + diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/Application.java b/echo-service/src/main/java/org/exampledriven/docker/echo/EchoServiceApplication.java similarity index 73% rename from echo-service/src/main/java/org/exampledriven/docker/echo/Application.java rename to echo-service/src/main/java/org/exampledriven/docker/echo/EchoServiceApplication.java index 3881c7c..4f3188a 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/Application.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/EchoServiceApplication.java @@ -3,16 +3,15 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @EnableWebMvc @SpringBootApplication @EnableDiscoveryClient -public class Application { +public class EchoServiceApplication { public static void main(String[] args) { - SpringApplication.run(Application.class, args); + SpringApplication.run(EchoServiceApplication.class, args); } } diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/Config.java b/echo-service/src/main/java/org/exampledriven/docker/echo/config/Config.java similarity index 97% rename from echo-service/src/main/java/org/exampledriven/docker/echo/Config.java rename to echo-service/src/main/java/org/exampledriven/docker/echo/config/Config.java index 8733b2e..f97d350 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/Config.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/config/Config.java @@ -1,4 +1,4 @@ -package org.exampledriven.docker.echo; +package org.exampledriven.docker.echo.config; import com.netflix.appinfo.AmazonInfo; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostFactory.java b/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostFactory.java index fb53426..7fe5c25 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostFactory.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostFactory.java @@ -10,6 +10,9 @@ */ public class HostFactory { + private HostFactory(){ + } + public static HostInfo create(HttpServletRequest request) { return new HostInfo(request.getLocalAddr(), request.getLocalPort(), getHostName()); } diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostInfo.java b/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostInfo.java index 3a2008d..014d2cd 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostInfo.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/domain/HostInfo.java @@ -1,44 +1,21 @@ package org.exampledriven.docker.echo.domain; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + /** * Created by Peter_Szanto on 6/16/2016. */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString public class HostInfo { private String address; private int port; private String hostName; - public HostInfo() { - } - - public HostInfo(String address, int port, String hostName) { - this.address = address; - this.port = port; - this.hostName = hostName; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getHostName() { - return hostName; - } - - public void setHostName(String hostName) { - this.hostName = hostName; - } } diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/rest/EchoController.java b/echo-service/src/main/java/org/exampledriven/docker/echo/rest/EchoController.java index 307d140..ed1f140 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/rest/EchoController.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/rest/EchoController.java @@ -1,10 +1,10 @@ package org.exampledriven.docker.echo.rest; -import org.exampledriven.docker.echo.domain.HostInfo; import org.exampledriven.docker.echo.domain.HostFactory; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.exampledriven.docker.echo.domain.HostInfo; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; + import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @@ -12,25 +12,19 @@ @RestController public class EchoController { - @RequestMapping(value = "/echo", method = RequestMethod.GET, produces = "application/json") + @GetMapping(value = "/echo", produces = "application/json") public HostInfo getHost(HttpServletRequest request) { - return HostFactory.create(request); - } - @RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json") + @GetMapping(value = "/", produces = "application/json") public Map getFullInfo(HttpServletRequest request) { HashMap result = new HashMap<>(); - result.put("host", HostFactory.create(request)); - result.put("env", System.getenv()); return result; - } - } \ No newline at end of file diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteEchoController.java b/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteEchoController.java index 2b39e05..67cbcfc 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteEchoController.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteEchoController.java @@ -1,39 +1,36 @@ package org.exampledriven.docker.echo.rest; -import org.exampledriven.docker.echo.Config; +import lombok.RequiredArgsConstructor; +import org.exampledriven.docker.echo.config.Config; import org.exampledriven.docker.echo.domain.HostFactory; import org.exampledriven.docker.echo.domain.HostInfo; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpServletRequest; - @RestController @RequestMapping(value = "/echo") +@RequiredArgsConstructor public class RemoteEchoController { - @Autowired @Qualifier(Config.LOADBALANCED) - RestTemplate loadBalancedRestTemplate; + private final RestTemplate loadBalancedRestTemplate; - @Autowired @Qualifier(Config.STANDARD) - RestTemplate restTemplate; + private final RestTemplate restTemplate; - @Autowired - RemoteHostInfoClient remoteHostInfoClient; + private final RemoteHostInfoClient remoteHostInfoClient; @GetMapping(value = "/remote-echo", produces = "application/json") public Map getHost(HttpServletRequest request) { - Map result = new HashMap(); + Map result = new HashMap<>(); result.put("local", HostFactory.create(request)); getRemoteHostInfo(result, "http://example_echo-service:9098/echo (Docker swarm service)", restTemplate, "http://example_echo-service:9098/echo"); @@ -41,10 +38,9 @@ public Map getHost(HttpServletRequest request) { getRemoteHostInfo(result, "http://echo-service/echo (Ribbon+Eureka)", loadBalancedRestTemplate, "http://echo-service/echo"); return result; - } - private void getRemoteHostInfo(Map result, String key, RestTemplate loadBalancedRestTemplate, String url) { + private void getRemoteHostInfo(Map result, String key, RestTemplate loadBalancedRestTemplate, String url) { HostInfo remoteHostInfo = null; try { remoteHostInfo = remoteHostInfoClient.getRemoteHostInfo(loadBalancedRestTemplate, url); diff --git a/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteHostInfoClient.java b/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteHostInfoClient.java index a72b1b5..d857343 100644 --- a/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteHostInfoClient.java +++ b/echo-service/src/main/java/org/exampledriven/docker/echo/rest/RemoteHostInfoClient.java @@ -10,16 +10,13 @@ public class RemoteHostInfoClient { public HostInfo getRemoteHostInfo(RestTemplate restTemplate, String url) { - - HostInfo hostInfo = restTemplate.exchange( + return restTemplate.exchange( url, HttpMethod.GET, null, - new ParameterizedTypeReference() {}) - .getBody(); - - return hostInfo; - + new ParameterizedTypeReference() { + }) + .getBody(); } } \ No newline at end of file diff --git a/eureka-server/src/main/java/org/exampledriven/eureka/Application.java b/eureka-server/src/main/java/org/exampledriven/eureka/EurekaServerApplication.java similarity index 70% rename from eureka-server/src/main/java/org/exampledriven/eureka/Application.java rename to eureka-server/src/main/java/org/exampledriven/eureka/EurekaServerApplication.java index 6ee5bc2..00c818c 100644 --- a/eureka-server/src/main/java/org/exampledriven/eureka/Application.java +++ b/eureka-server/src/main/java/org/exampledriven/eureka/EurekaServerApplication.java @@ -8,10 +8,10 @@ @SpringBootApplication @EnableEurekaServer @EnableDiscoveryClient -public class Application { +public class EurekaServerApplication { - public static void main(String[] args) throws Exception { - SpringApplication.run(Application.class, args); - } + public static void main(String[] args) { + SpringApplication.run(EurekaServerApplication.class, args); + } }