Spring Cloud Config Client mit dem Beispiel verstehen
1. Das Zweck des Artikel
OK, Wir sind in die Serie von der Anleitungen einer verteilten Applikation benutzend Spring Cloud. Eine Applikation zum Management Taxi. In den letzten Artikel habe ich Sie bei der Erstellung einer Applikation Config-Server angeleitet. Sie managt die Konfigurationsinformationen für die anderen Dienstleistungen (die Applikation)
Die letzten Unterrichten sehen
In dieser Unterricht werden wir eine Applikation "About Company". Sie ist eine unabhängige Applikation mit der Applikation "Passenger Management" (die Kunden Management) und "Diver Management" (die Fahrer Management). Für einen großen Taxi Firma, wie Uber ist die Menge von Benutzer zum Zugang auf ihrer Webseite so groß. Es ist eine gute Idee, eine Applikation für die Vorstellung der Firma entscheidet mit die anderen Funktionen zu haben
Die Applikation "About Company" wird eine unabhängige Database benutzen. Die Konfigurationsinformation Database wird auf Config-Server managt. In der Architektur Microservice ist diese Applikation einfach keine Webseite zur Firmavorstellung. Sie kann eine Dienstleistung zur Informationversorgung für die anderen Applikationen sein, zum Beispiel die Informationversorung von Hotline, Feedback Email ... In Kürze ist sie eine Teil vom System Microservice.
Achtung: Das Hauptziel der Unterricht ist die Diskussion und die Übung mit einem Beispiel "Wie kann eine Applikation ihre auf Config-Server managten Konfigurationsinformationen holen".
2. Das Projekt Spring Boot erstellen
- Name: ConfigClientAboutCompany
- Group: org.o7planning
- Artifact: ConfigClientAboutCompany
- Description: Spring Cloud Config Client (About Company App)
- Package: org.o7planning.aboutcompany
JDBC Driver (MySQL, PostGres,..)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<!-- SQL Server - Mssql-Jdbc driver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Oracle Driver -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
pom.xml
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.o7planning</groupId>
<artifactId>ConfigClientAboutCompany</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ConfigClientAboutCompany</name>
<description>Spring Cloud Config Config Client (About Company App)</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<!-- SQL Server - Mssql-Jdbc driver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Oracle Driver -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<!-- Repository for ORACLE JDBC Driver -->
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ConfigClientAboutCompanyApplication.java
package org.o7planning.aboutcompany;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConfigClientAboutCompanyApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientAboutCompanyApplication.class, args);
}
}
3. Spring Cloud Config Client konfigurieren
Diese Applikation soll ihre auf Config-Server gelagerten Konfiguration lesen. Deshalb sollen Sie sie die Information über Config-Server sagen. Diese Information werden in die File bootstrap.properties (oder bootstrap.yml) konfiguriert. Diese File wird so früh durch die Applikation verwendet während die Applikation startet
Es gibt einen Unterschied in die Format von der File *.properties und File *.yml, und Sie können in den folgenden Artikel mehr gucken
- properties vs yml
bootstrap.properties
# Read file on Config-Server:
# app-about-company.properties or app-about-company.yml
spring.application.name=app-about-company
# This is the default:
spring.cloud.config.uri=http://localhost:8888
management.security.enabled=false
konfigurieren damit die Applikation auf dem Port 7777 läuft:
application.properties
server.port=7777
Die Konfiguration File für diese Applikation (auf GitHub sehen):
4. Controller
MainController.java
package org.o7planning.aboutcompany.controller;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
public class MainController {
// https://github.com/o7planning/spring-cloud-config-git-repo-example
// See: app-about-company.properties
@Value("${text.copyright: Default Copyright}")
private String copyright;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String userName;
@Value("${spring.datasource.password}")
private String password;
@Autowired
private DataSource dataSource;
@RequestMapping("/showConfig")
@ResponseBody
public String showConfig() {
String configInfo = "Copy Right: " + copyright //
+ "<br/>spring.datasource.driver-class-name=" + driverClassName //
+ "<br/>spring.datasource.url=" + url //
+ "<br/>spring.datasource.username=" + userName //
+ "<br/>spring.datasource.password=" + password;
return configInfo;
}
@RequestMapping("/pingDataSource")
@ResponseBody
public String pingDataSource() {
try {
return this.dataSource.toString();
} catch (Exception e) {
e.printStackTrace();
return "Error: " + e.getMessage();
}
}
}
@RefreshScope:
Irgendein Spring Bean , das durch @RefreshScope annotiert wird, wird bei Runtime aktualisiert werden. Und die Komponenten, die es benutzen, werden ein neues Objekt in den nächsten Aufruf auf die Methode bekommen, werden voll initializiert und die Abhängigkeiten injiziert
Anleitungen Spring Cloud
- Was ist Cloud Computing?
- Einführung in Netflix und seine Cloud-Computing-Technologie
- Einführung in Spring Cloud
- Spring Cloud Config Server mit dem Beispiel verstehen
- Spring Cloud Config Client mit dem Beispiel verstehen
- Spring Cloud Eureka Server mit dem Beispiel verstehen
- Spring Cloud Discovery Eureka Client mit dem Beispiel verstehen
- Load Balancing in Spring Cloud mit Ribbon und Beispiel verstehen
Show More