3.開始使用Spring Cloud實戰微服務

 

                 開始使用Spring Cloud實戰微服務

 3.1. Spring Cloud實戰前提

              3.1.1. 須要的技術儲備

                  語言方面:可使用Java、scala、Groovy...等等,推薦使用Java

                  構建工具方面:Java開發者主要使用的是Maven,Androd開發者使用的是Gradle。(將Maven項目轉換成Gradle項目所使用的命令是:gradle init --type pom)

                  依賴技術:Spring Boot

              3.1.2. 使用的工具及軟件版本

                   原則:使用最新的版本進行開發

                   JDK: 1.8版本

                   Maven:3.3.9版本

                   IDE:Spring Tool Suite 3.8.2版本,IDEA

                   Spring Boot :1.5.1版本

                   Spring Cloud:Camden SR5版本

3.2. 服務提供者與服務消費者

             3.2.1 什麼是服務提供者和服務消費者?

                服務提供者:是指服務的被調用方(即:爲其它服務提供服務的服務)

                服務消費者:是指服務的調用方(即:依賴其它服務的服務)

3.3. 編寫服務提供者

               3.3.1. 手動編寫項目

               3.3.2. 使用Spring Initializr快速建立Spring Boot項目

               首先,咱們須要訪問http://start.spring.io,以下圖所示

接着,選擇Spring Boot的版本,目前最新的Spring Boot版本是1.5.1,以下圖所示。

 

 

 

接着咱們須要選擇一些依賴,在搜索框中輸入「Web」,會自動顯示出有關Web的下拉列表,咱們選擇第一個,以下圖所示。

 

選擇完Web以後,會在下方看到咱們所依賴的Web,以下圖所示

 

接着,再選擇JPA、Mysql,最後點擊下方的「Generate Project」按鈕,以下圖所示。

點擊上圖的"Generrate Project"以後彈出以下圖所示的對話框,咱們點擊另存爲保存到本地。

接着,咱們打開開發工具IntellijIDEA工具,若是是第一次使用IDEA工具,會出現以下圖所示的界面,咱們點擊「Import Project」。

會彈出以下圖所示的界面,咱們選擇咱們剛纔生成的microservice-simple-provider-user工程下的pom.xml文件,而後點擊"OK"

 

 

點擊上圖的「OK」以後,咱們即可以看到以下圖所示的界面,咱們什麼也不作,直接點擊"Next"(一直下一步)

 

上圖中resources目錄下的static和templates兩個文件夾沒有什麼用,咱們刪掉它,而後咱們在resources目錄下新建一個schema.sql文件,新建的schema.sql文件須要配置一下「Configure data source」、"Change dialect to..."這兩項,咱們先點擊"Configure data source"。

 

  點擊上圖的"Configure data source"以後,咱們能夠看到以下圖所示的界面,咱們選擇左側的"MySQL",右側的"Driver files"下面沒有內容,咱們點擊"Download"下載驅動文件。

 

 下載完驅動文件後,以下圖所示,咱們點擊"OK"

  這時若是您的IDEA工具還歷來沒添加過Mysql,那麼schema.sql文件依然提示要配置data source和方言,那麼咱們怎麼添加Mysql呢?咱們發現啊,在IDEA工具的右側,有一列工具欄,咱們點擊Database那一欄。

 點擊上圖的"Database"那一欄後咱們能夠看到以下圖所示的界面,能夠看到,我還未添加過任何數據庫,下面咱們點擊那個"+"號圖標。

 點擊上圖的"+"號圖標以後,咱們看到以下圖所示界面,咱們點擊MySQL

   點擊上圖的"MySQL"以後,咱們能夠看到以下圖所示的界面,咱們新建一個數據庫Database:"microservice",User和Password是咱們本地安裝的Mysql的用戶名和密碼。以後咱們須要測試鏈接是否能夠成功(先不要點擊Test Connection)。

 

 

  點擊上圖的"Apply"和"OK"以後,能夠看到以下圖所示的界面,咱們能夠試一條SQL語句看是否能夠查詢到結果,好比咱們查詢全部的數據庫,能夠看到正確查詢出告終果。

 

 

咱們添加完Mysql數據庫後,咱們剛纔添加的schema.sql文件提示的內容便減小了一條,只剩下讓咱們配置方言了,以下圖所示。咱們點擊"Change dialect to..."

咱們能夠看到以下圖所示的界面,能夠看到默認狀況下SQL Dialect都是Generic,咱們既然用的數據庫是Mysql,那麼咱們便點擊"Generic",在下拉框中選擇"MySQL"。

選擇完方言以後,以下圖所示。咱們點擊"OK"

點擊上圖的"OK"以後,咱們能夠看到咱們的schema.sql文件終於再也不報異常提示信息了,咱們在該sql文件中寫上建表語句,以下圖所示。

 

   同理,咱們再新建一個data.sql文件,並在該文件中寫上插入語句,以下圖所示。

            3.3.3. 編寫服務提供者

           實體類User

package com.itmuch.cloud.microservicesimpleprovideruser.entity;

import javax.persistence.*;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  Long id;
    @Column
    private  String username;
    @Column
    private  String name;
    @Column
    private  int age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getBalance() {
        return balance;
    }

    public void setBalance(float balance) {
        this.balance = balance;
    }

    @Column
    private  float balance;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

         UserRepository

package com.itmuch.cloud.microservicesimpleprovideruser.repository;

import com.itmuch.cloud.microservicesimpleprovideruser.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;



@Repository
public interface UserRepository extends JpaRepository<User ,Long> {
}

 

       UserController

package com.itmuch.cloud.microservicesimpleprovideruser.Controller;

import com.itmuch.cloud.microservicesimpleprovideruser.entity.User;
import com.itmuch.cloud.microservicesimpleprovideruser.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;
    @GetMapping("/simple/{id}")
    public User findById(@PathVariable Long id){
       return userRepository.findOne(id);
    }
}

注意版本要選擇2.0.0下的

 

3.4. 編寫服務消費者

           3.3.1. 手動編寫項目

           3.3.2. 使用Spring Initializr快速建立Spring Boot項目(同理和服務提供者)

 第二步咱們搭建了一個服務提供者,如今咱們來搭建一個服務消費者,咱們依然從http://start.spring.io網站生成咱們的微服務框架,咱們能夠注意到,在Dependencies這一欄只選擇了一個Web,選好並輸入完後,點擊"Generate Project"按鈕。html

點擊上圖的"Generate Project"按鈕後會彈出下載對話框,以下圖所示,另存爲保存到本地磁盤。java

 下面咱們把該消費者導入到Intellij IDEA工具中,咱們點擊File---->New------>Module from Existing Sources...,以下圖所示git

在彈出的對話框中咱們選擇咱們剛纔加壓好的movie微服務的pom.xml文件,而後點擊"OK",以下圖所示。web

下面兩步只需點擊"Next",而後點擊"Finish"按鈕便可把工程加到Intellij IDEA工具中來,以下圖所示spring

 

 

           3.4.3. 編寫服務提供者

   

movieController

package com.itmuch.cloud.microservicesimpleprovidermovie.Controller;

import com.itmuch.cloud.microservicesimpleprovidermovie.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class movieController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/movie/{id}")
    public User  findById(@PathVariable Long id)
    {
       return   this.restTemplate.getForObject("http://localhost:7900/simple/" + id, User.class);
    }

}

實體類

package com.itmuch.cloud.microservicesimpleprovidermovie.entity;

public class User {
    private  Long id;

    private  String username;

    private  String name;

    private  int age;

    private  float balance;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getBalance() {
        return balance;
    }

    public void setBalance(float balance) {
        this.balance = balance;
    }
}

配置文件application.yml

     

server:
   port: 7901

啓動類

package com.itmuch.cloud.microservicesimpleprovidermovie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class MicroserviceSimpleProviderMovieApplication {
    @Bean
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(MicroserviceSimpleProviderMovieApplication.class, args);
    }
}

 

 

3.5. 爲項目整合Spring Boot Actuator

    1. 瞭解Acuator

      Spring Boot Acuator 提供了不少控制端點。從而瞭解應用程序的情況。

    2. Acuator監控端點及描述

    3.  

    4. 爲項目添加依賴

      <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>

       測試:訪問 http://127.0.0.1:8080/health
       結果:{"status":"UP"} ,返回的是UP表示正常

      訪問http://127.0.0.1:8080/info    結果:{} 證實info沒有公開   結果:{}證實info沒有公開

    5. 配置application.yml

      info:  
        app:  
          name: "@project.name@"   
          description: "@project.description@"  
          version: "@project.version@"  
          spring-boot-version: "@project.parent.version@" 
      再次訪問 http://localhost:8080/info 結果: 
      {"app":{"name":"microservice-simple-provider-user","description":"zjmdemo","version":"0.0.1-SNAPSHOT","spring-boot-version":"1.5.9.RELEASE"}} 訪問:http://127.0.0.1:8080/autoconfig
    6. 參考文檔:

      https://docs.spring.io/spring-boot/docs/1.5.9.BUILD-SNAPSHOT/reference/htmlsingle

3.6. 硬編碼有哪些問題

 

項目GIT庫:https://gitee.com/cyj930307/springcloud_textbook.gitsql

相關文章
相關標籤/搜索