每天學點SpringCloud(一):使用SpringBoot2.0.3整合SpringCloud

来源:https://www.cnblogs.com/zhixiang-org-cn/archive/2018/07/10/9287444.html
-Advertisement-
Play Games

最近開始學習SpringCloud,在此把我學習的過程記錄起來,跟大家分享一下,一起學習。想學習SpringCloud的同學趕快上車吧。 本次學習使用得SpringBoot版本為2.0.3.RELEASE,SpringCloud版本為Finchley.RELEASE 創建父Maven工程 首先我們創 ...


 

最近開始學習SpringCloud,在此把我學習的過程記錄起來,跟大家分享一下,一起學習。想學習SpringCloud的同學趕快上車吧。

 

本次學習使用得SpringBoot版本為2.0.3.RELEASE,SpringCloud版本為Finchley.RELEASE

 

 

 

創建父Maven工程

首先我們創建一個Maven項目

 

 

我們把此項目當做我們項目的父項目,以後我們所有的子項目都應該繼承這個項目,來看一下此項目的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>cn.org.zhixiang</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    </dependencyManagement>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

 

創建服務提供者

 

  1. 右鍵項目名稱:spring-cloud-demo,選擇New-->Module,選擇Maven,然後點擊next,然後呢artifactId給項目取名為cloud-demo-provider,現在服務提供者項目就創建好了。因為接下來我們測試需要訪問程式,所以接著我們引入所需的web依賴。
<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
</dependencies>

 

2.在resources文件夾下新建application.properties或者application.yml(二者任選其一),添加如下配置:

properties文件這樣寫

spring.application.name=provider-demo
server.port=8078

yml這樣寫

spring:
  application:
    name: provider-demo
server:
  port: 8078

spring.application.name呢,意思是給給項目起個名字叫做provider-demo

server.port呢,指定項目啟動時的埠為8078

 

3.在Java文件夾下創建包cn.org.zhixiang(這個包名是我的網站功能變數名稱的反轉,大家可以自行定義),在此包下新建CloudDemoProviderApplication類

package cn.org.zhixiang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class CloudDemoProviderApplication {

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

@SpringBootApplication註解呢是SpringBoot的一個組合註解,主要註解為@Configuration、@EnableAutoConfiguration、@ComponentScan

我們使用SpringBoot啟動項目時一般都會使用此註解,一會啟動項目的時候我們在這個類中右鍵選擇run CloudDemoProviderApplication 就可以啟動了

 

4.在cn.org.zhxiang包下新建包domain,在domain包中創建一個User實體類

public class User{

    private long id;
    private String name;
    private int age;
    public long getId() {
        return id;
    }

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

    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;
    }
}

 

5.在cn.org.zhxiang包下新建包controller,在controller包中創建一個類UserController

 

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping(value = "/getUser/{id}")
    public User getUser(@PathVariable Long id){
        User user=new User();
        user.setId(id);
        user.setName("張三");
        user.setAge(18);
        return user;
    }
    @GetMapping(value = "/getName")
    public String getName(){
        return "張三";
    }
}

 

@RestController註解呢,其實就是@ResponseBody + @Controller的組合註解,@GetMapping呢,相當於@RequestMapping(value="", method = RequestMethod.GET)

 

現在我們這個Provider的項目的目錄結構應該是這樣的:

 

6.安裝剛纔所說的啟動項目,打開瀏覽器訪問http://localhost:8078/user/getUser/3 。如果瀏覽器返回一個json {"id":3,"name":"張三","age":18},那麼就代表我們的服務提供者寫好了。

 

創建服務消費者

1.同服務提供者的套路,我們創建一個名為cloud-demo-consumer的工程,他也只需要依賴web模塊,在application.properties或者application.yml配置埠為8088,應用名稱為consumer-demo。

 

2.創建cn.org.zhixiang包,創建CloudDemoConsumerApplication類。不同於提供者的是,這次啟動類中需要增加一段代碼

@SpringBootApplication
public class CloudDemoConsumerApplication {
   @Bean
   public RestTemplate restTemplate(){
      return new RestTemplate();
   }
   public static void main(String[] args) {
      SpringApplication.run(CloudDemoConsumerApplication.class, args);
   }
}

 

RestTemplate類呢,是一個對於HTTP請求封裝的一個類,相信大家都知道我們使用原生API訪問一個URL需要的代碼是很多的,這個呢,就是一個封裝簡化的版本。

@Bean註解呢,其實就等同於以前在xml中配置的如下代碼

 

<beans>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>
</beans>

 

同樣的,在此項目中增加一個User類,與提供者一樣。

 

而UserController就不一樣了

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getUser/{id}")
    public User getUser(@PathVariable Long id){
        return restTemplate.getForObject("http://localhost:8078/user/getUser/"+id,User.class);
    }
}

它的getUser方法沒有自己實現,而是調用的服務提供者的getUser方法。

 

接著呢,我們首先啟動服務提供者,然後再啟動消費者,當我們訪問http://localhost:8088/user/getUser/3 時同樣也能取得結果,這樣一個簡單的SpringCloud項目的服務提供者和消費者就已經完成了。

 

GitHub:https://github.com/2388386839/spring-cloud-demo

碼雲:https://gitee.com/zhixiang_blog/apring-cloud-demo

 

如果對您有所幫助,請記得幫忙點一個star哦

 

 

本文出自https://zhixiang.org.cn/#/blog/read/366fba06-53f7-4882-b313-c87506bd2a93,轉載請保留。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.評估功能變數名稱類型 .com——商業實體 .edu——僅限有學位或更高等學歷授予資格的高等教育使用 .gov——僅限政府使用 .net——與Internrt網路支持相關的團體,通常是Internet服務提供商或者電信公司 .org——非盈利組織 2.HTML -HTML是一套標記符號或者代碼集,他們插 ...
  • 一、理解 1、什麼是模塊、模塊化? 將一個複雜的程式依據一定的規範封裝成幾個文件,併進行組合在一起 2、為什麼要模塊化? 降低複雜度,提高解耦性,部署方便 3、模塊化的好處 避免命名衝突(減少命名空間污染) 更好的分離,按需載入 更高復用性 高可維護性 4、頁面引入載入script 二、模塊化規範 ...
  • 1.Socket簡介 Socket也稱作“套接字“,是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層複雜的操作抽象為幾個簡單的介面供應用層調用以實現進程在網路中通信。它分為流式套接字和數據包套接字,分別對應網路傳輸控制層的TCP和UDP協議。TCP協議是一種面向連接的、可靠的、基於位元組流的傳輸 ...
  • 相信看過 每天學點SpringCloud(一):簡單服務提供者消費者調用的同學都發現了,在最後消費者調用提供者的時候把提供者的地址硬編碼在了代碼中,這樣的方式肯定是不行的,今天,我們就是要Eureka來解決這個問題 創建Eureka服務 1.我們在原先項目的基礎上再新建一個項目cloud-demo- ...
  • 微服務 將整體功能按著模塊劃分成多個獨立的單元,這些單元可以獨立部署,它們之前通過輕量級的web api方式進行通訊,對於微服務框架來說,最流行的就是springcloud和Service Fabric,前者是java開發,後者是.net的產品,今天主要介紹一下springcloud! 參考文章:h ...
  • 系統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:my ...
  • 基於.net core 的微服務,網上很多介紹都是千篇一律基於類似webapi,通過http請求形式進行訪問,但這並不符合大家使用習慣.如何像形如[ GetService<IOrderService>().SaveOrder(orderInfo)]的方式, 調用遠程的服務,如果你正在為此苦惱, 本文 ...
  • 大型網站架構從來都不是一個預先定義的架構,而是一個演進式的架構。很少有一個網站從建站開始,就能夠因具備大型網站的所有屬性而一成不變的,從最簡單的LAMP架構,再到基於IOE的大型集中式應用架構,再演變成時下的分散式應用架構,隨著網站用戶規模的擴大,架構也在不斷演進。從實體機到虛擬機再到當前流行的Do... ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...