New code for article BAEL-2460. Added maven module spring-cloud-kubernetes-project
This commit is contained in:
parent
fe289003fa
commit
928a23494d
|
@ -0,0 +1,12 @@
|
||||||
|
# requires Docker version 17.05.0-ce-rc1, build 2878a85
|
||||||
|
FROM maven:3.5-jdk-8 as BUILDAGENCY
|
||||||
|
|
||||||
|
COPY src /usr/src/myapp/src
|
||||||
|
COPY pom.xml /usr/src/myapp
|
||||||
|
RUN mvn -f /usr/src/myapp/pom.xml clean package -DskipTests
|
||||||
|
|
||||||
|
FROM openjdk:alpine
|
||||||
|
|
||||||
|
COPY --from=BUILDAGENCY /usr/src/myapp/target/*.jar /maven/
|
||||||
|
|
||||||
|
CMD java $JAVA_OPTS -jar maven/*.jar
|
|
@ -0,0 +1,71 @@
|
||||||
|
<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>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.0.6.RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>client-service</artifactId>
|
||||||
|
<groupId>com.baeldung.spring.cloud</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<spring-boot.version>2.0.1.RELEASE</spring-boot.version>
|
||||||
|
<spring-cloud-dependencies.version>Finchley.SR2</spring-cloud-dependencies.version>
|
||||||
|
<spring.cloud.k8s.version>0.3.0.RELEASE</spring.cloud.k8s.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
<version>${spring-cloud-dependencies.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-kubernetes-dependencies</artifactId>
|
||||||
|
<version>${spring.cloud.k8s.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-kubernetes-discovery</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,96 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.department;
|
||||||
|
|
||||||
|
import com.baeldung.spring.cloud.kubernetes.services.client.config.ClientConfig;
|
||||||
|
import com.baeldung.spring.cloud.kubernetes.services.client.service.TravelAgencyClientService;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.boot.CommandLineRunner;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.cloud.client.ServiceInstance;
|
||||||
|
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
|
||||||
|
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||||
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@EnableDiscoveryClient
|
||||||
|
@EnableCircuitBreaker
|
||||||
|
public class ClientApplication implements CommandLineRunner {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(ClientApplication.class);
|
||||||
|
private static final String FIND_TRAVEL_DEALS_TASK = "Find new travel deals";
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DiscoveryClient discoveryClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TravelAgencyClientService travelAgencyClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClientConfig clientConfig;
|
||||||
|
|
||||||
|
private String task = FIND_TRAVEL_DEALS_TASK;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
private RestTemplate restTemplate() {
|
||||||
|
return new RestTemplate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Value("${spring.application.name}")
|
||||||
|
private String appName;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(ClientApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) {
|
||||||
|
log.info("Client (" + appName + ":" + clientConfig.getType() + ")Started! ");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Every 10 seconds look for new deals
|
||||||
|
*/
|
||||||
|
@Scheduled(fixedRate = 10000)
|
||||||
|
public void doSomeWork() throws UnknownHostException {
|
||||||
|
if (task.equals(FIND_TRAVEL_DEALS_TASK)) {
|
||||||
|
task = findNewDeals();
|
||||||
|
if (task.equals(FIND_TRAVEL_DEALS_TASK)) {
|
||||||
|
log.info("NO DEAL FOUND, I will keep looking for one ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.info(">>> Working on " + task);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String findNewDeals() throws UnknownHostException {
|
||||||
|
List<String> services = this.discoveryClient.getServices();
|
||||||
|
|
||||||
|
for (String service : services) {
|
||||||
|
List<ServiceInstance> instances = this.discoveryClient.getInstances(service);
|
||||||
|
for (ServiceInstance se : instances) {
|
||||||
|
Map<String, String> metadata = se.getMetadata();
|
||||||
|
String type = metadata.get("type");
|
||||||
|
if ("deal".equals(type)) {
|
||||||
|
|
||||||
|
String from = appName + "@" + InetAddress.getLocalHost().getHostName();
|
||||||
|
String url = "http://" + se.getServiceId();
|
||||||
|
return travelAgencyClient.requestDeals(url, from);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FIND_TRAVEL_DEALS_TASK;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.client.config;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@ConfigurationProperties(prefix = "client")
|
||||||
|
public class ClientConfig {
|
||||||
|
|
||||||
|
private String type = "generic-client";
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.client.controller;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
|
import com.baeldung.spring.cloud.kubernetes.services.client.config.ClientConfig;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.cloud.context.config.annotation.RefreshScope;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import static org.springframework.web.bind.annotation.RequestMethod.GET;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RefreshScope
|
||||||
|
public class ClientController {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(ClientController.class);
|
||||||
|
|
||||||
|
private enum ClientTravelType {
|
||||||
|
BUSINESS,
|
||||||
|
STUDENT,
|
||||||
|
COUPLE,
|
||||||
|
FRIENDS,
|
||||||
|
SINGLE,
|
||||||
|
FAMILY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ClientConfig clientConfig;
|
||||||
|
|
||||||
|
@RequestMapping(method = GET)
|
||||||
|
public String get() throws UnknownHostException, UnsupportedEncodingException {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append("Host: ").append(InetAddress.getLocalHost().getHostName()).append("<br/>");
|
||||||
|
stringBuilder.append("Client Type: ").append(clientConfig.getType()).append("<br/>");
|
||||||
|
stringBuilder.append("IP: ").append(InetAddress.getLocalHost().getHostAddress()).append("<br/>");
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.client.service;
|
||||||
|
|
||||||
|
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
|
||||||
|
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TravelAgencyClientService {
|
||||||
|
|
||||||
|
private final RestTemplate restTemplate;
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(TravelAgencyClientService.class);
|
||||||
|
|
||||||
|
public static final String FIND_NEW_TRAVEL_DEALS = "find new travel deals";
|
||||||
|
|
||||||
|
public TravelAgencyClientService(RestTemplate restTemplate) {
|
||||||
|
this.restTemplate = restTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@HystrixCommand(fallbackMethod = "getFallbackName", commandProperties = {
|
||||||
|
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000")
|
||||||
|
})
|
||||||
|
public String requestDeals(String to,
|
||||||
|
String from) {
|
||||||
|
|
||||||
|
String url = String.format("%s/deals/%s",
|
||||||
|
to,
|
||||||
|
from);
|
||||||
|
|
||||||
|
log.info("--- Requesting travel deals to travel agency " + url);
|
||||||
|
|
||||||
|
return restTemplate.getForObject(url, String.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getFallbackName(String to,
|
||||||
|
String from) {
|
||||||
|
log.error("--- This travel agency (" + to + ") not available now, please come back later (Fallback) client:" + from);
|
||||||
|
return FIND_NEW_TRAVEL_DEALS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: client-service
|
||||||
|
cloud:
|
||||||
|
config:
|
||||||
|
uri: http://localhost:8088
|
|
@ -0,0 +1,12 @@
|
||||||
|
# requires Docker version 17.05.0-ce-rc1, build 2878a85
|
||||||
|
FROM maven:3.5-jdk-8 as BUILDAGENCY
|
||||||
|
|
||||||
|
COPY src /usr/src/myapp/src
|
||||||
|
COPY pom.xml /usr/src/myapp
|
||||||
|
RUN mvn -f /usr/src/myapp/pom.xml clean package -DskipTests
|
||||||
|
|
||||||
|
FROM openjdk:alpine
|
||||||
|
|
||||||
|
COPY --from=BUILDAGENCY /usr/src/myapp/target/*.jar /maven/
|
||||||
|
|
||||||
|
CMD java $JAVA_OPTS -jar maven/*.jar
|
|
@ -0,0 +1,76 @@
|
||||||
|
<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>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.0.6.RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>gateway-service</artifactId>
|
||||||
|
<groupId>com.baeldung.spring.cloud</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<spring-boot.version>2.0.1.RELEASE</spring-boot.version>
|
||||||
|
<spring-cloud-dependencies.version>Finchley.SR2</spring-cloud-dependencies.version>
|
||||||
|
<spring.cloud.k8s.version>0.3.0.RELEASE</spring.cloud.k8s.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
<version>${spring-cloud-dependencies.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-kubernetes-dependencies</artifactId>
|
||||||
|
<version>${spring.cloud.k8s.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-gateway</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-kubernetes-discovery</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-kubernetes-ribbon</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,44 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.gateway;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.cloud.client.discovery.DiscoveryClient;
|
||||||
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
|
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
|
||||||
|
import org.springframework.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator;
|
||||||
|
import org.springframework.cloud.gateway.discovery.DiscoveryLocatorProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
@EnableScheduling
|
||||||
|
@EnableDiscoveryClient
|
||||||
|
@SpringBootApplication
|
||||||
|
public class GatewayApplication {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(GatewayApplication.class);
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private DiscoveryClient discoveryClient;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public DiscoveryClientRouteDefinitionLocator discoveryClientRouteLocator(DiscoveryClient discoveryClient,
|
||||||
|
DiscoveryLocatorProperties properties) {
|
||||||
|
return new DiscoveryClientRouteDefinitionLocator(discoveryClient,
|
||||||
|
properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(GatewayApplication.class,
|
||||||
|
args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@LoadBalanced
|
||||||
|
@Bean
|
||||||
|
RestTemplate restTemplate() {
|
||||||
|
return new RestTemplate();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: gateway-service
|
||||||
|
cloud:
|
||||||
|
config:
|
||||||
|
uri: http://localhost:8088
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
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.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-kubernetes-project</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<name>spring-cloud-kubernetes-project</name>
|
||||||
|
<description>Spring Cloud Kubernetes</description>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>travel-agency-service</module>
|
||||||
|
<module>client-service</module>
|
||||||
|
<module>gateway-service</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung.spring.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<relativePath>..</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,12 @@
|
||||||
|
# requires Docker version 17.05.0-ce-rc1, build 2878a85
|
||||||
|
FROM maven:3.5-jdk-8 as BUILDAGENCY
|
||||||
|
|
||||||
|
COPY src /usr/src/myapp/src
|
||||||
|
COPY pom.xml /usr/src/myapp
|
||||||
|
RUN mvn -f /usr/src/myapp/pom.xml clean package -DskipTests
|
||||||
|
|
||||||
|
FROM openjdk:alpine
|
||||||
|
|
||||||
|
COPY --from=BUILDAGENCY /usr/src/myapp/target/*.jar /maven/
|
||||||
|
|
||||||
|
CMD java $JAVA_OPTS -jar maven/*.jar
|
|
@ -0,0 +1,59 @@
|
||||||
|
<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>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>2.0.6.RELEASE</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>travel-agency-service</artifactId>
|
||||||
|
<groupId>com.baeldung.spring.cloud</groupId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<spring-boot.version>2.0.1.RELEASE</spring-boot.version>
|
||||||
|
<spring-cloud-dependencies.version>Finchley.SR2</spring-cloud-dependencies.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
|
||||||
|
<dependencyManagement>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-dependencies</artifactId>
|
||||||
|
<version>${spring-cloud-dependencies.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</dependencyManagement>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.department;
|
||||||
|
|
||||||
|
import com.baeldung.spring.cloud.kubernetes.services.travelagency.controller.TravelAgencyController;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.boot.CommandLineRunner;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class TravelAgencyApplication implements CommandLineRunner {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(TravelAgencyController.class);
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(TravelAgencyApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) throws Exception {
|
||||||
|
log.info("Travel Agency Started! ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.spring.cloud.kubernetes.services.travelagency.controller;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.Random;
|
||||||
|
import static org.springframework.web.bind.annotation.RequestMethod.GET;
|
||||||
|
import static org.springframework.web.bind.annotation.RequestMethod.POST;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
public class TravelAgencyController {
|
||||||
|
|
||||||
|
private String[] deals = {"London - Paris : 25 Euro", "London - Frankfurt : 25 Euro"};
|
||||||
|
private static final Log log = LogFactory.getLog(TravelAgencyController.class);
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(method = POST, path = "/deals/{client}")
|
||||||
|
public String deals(@PathVariable("client") String client) {
|
||||||
|
log.info("Client: " + client + " is requesting new deals!");
|
||||||
|
int randomDeal = new Random().nextInt(deals.length);
|
||||||
|
return deals[randomDeal];
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(method = GET, path = "/")
|
||||||
|
@ResponseBody
|
||||||
|
public String get() throws UnknownHostException {
|
||||||
|
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
stringBuilder.append("Host: ").append(InetAddress.getLocalHost().getHostName()).append("<br/>");
|
||||||
|
stringBuilder.append("IP: ").append(InetAddress.getLocalHost().getHostAddress()).append("<br/>");
|
||||||
|
stringBuilder.append("Type: ").append("Travel Agency").append("<br/>");
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
spring:
|
||||||
|
application:
|
||||||
|
name: travelagency-service
|
||||||
|
cloud:
|
||||||
|
config:
|
||||||
|
uri: http://localhost:8088
|
Loading…
Reference in New Issue