【springcloud】環境搭建與Rest使快速上手

来源:https://www.cnblogs.com/xbudian/archive/2022/08/07/16559224.html
-Advertisement-
Play Games

#SpringCloud環境搭建 --- Rest使用 個人主頁:https://www.cnblogs.com/xbudian/ 今天來到SpringCloud的學習,我們從spring boot微服務階段,學習到了用springboot去創建很多的微服務,但是這麼多微服務我們如果去管理,以及相互... ...


SpringCloud環境搭建 --- Rest使用

個人主頁:https://www.cnblogs.com/xbudian/

今天來到SpringCloud的學習,我們從spring boot微服務階段,學習到了用springboot去創建很多的微服務,但是這麼多微服務我們如果去管理,以及相互之間的聯繫呢?

而到了我們學習springcloud階段,其實相對而言是變簡單的,不需要寫很多代碼以及什麼操作,主要就是接收思想,瞭解其中的機制,而springCloud項目基於springboot項目,只需要幾行簡單的配置即可開始使用;

那來到了我們最熟悉的官網:https://spring.io/

在這裡插入圖片描述

進入spring cloud的學習,可以去讀讀這裡的話,我讀懂了,不告訴你

在這裡插入圖片描述

從springcloud的學習,我們可以看這張圖,我們學習這裡面幾個部分

在這裡插入圖片描述

Rest環境搭建

環境說明:jdk1.8,idea2019,maven3.6.X,springcloud最新版2021.0.3,mybatis-plus

我們首先搭建一個父工程項目,創建一個空的普通的maven項目,我們直接把src目錄刪除掉,pom文件寫下麵的使用父工程管理依賴,這裡都是與文章日期最新依賴。

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <junit.version>4.12</junit.version>
    <log4j.version>1.2.17</log4j.version>
    <lombok.version>1.18.24</lombok.version>
    <springcloud-version>2021.0.3</springcloud-version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <!--springcloud依賴-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${springcloud-version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- springboot依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.7.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--mysql驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.11</version>
        </dependency>


        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
        <!--日誌測試-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>




    </dependencies>
</dependencyManagement>
<build>
    <!--父工程的項目名稱-->
    <finalName>springcloud</finalName>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <!--以$開頭結尾 符合在src/main/resources路徑下麵訪問到 主要是yml文件或者properties文件-->
                <delimiters>
                    <delimit>$</delimit>
                </delimiters>
            </configuration>
        </plugin>
    </plugins>
</build>

有了父工程項目,我們再準備一個資料庫環境,寫一個api類,這裡我們新建一個簡單的賬戶表,往裡面插入幾條簡單的數據

DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
  `account_id` int(11) NOT NULL,
  `account_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `account_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  PRIMARY KEY (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of account
-- ----------------------------
INSERT INTO `account` VALUES ('1', 'zhangsan', '333');
INSERT INTO `account` VALUES ('2', 'lisi', '444');
INSERT INTO `account` VALUES ('3', 'wangwu', '555');
INSERT INTO `account` VALUES ('4', 'zhangliu', '666');
INSERT INTO `account` VALUES ('5', 'qiqi', '777');
INSERT INTO `account` VALUES ('6', 'baba', '888');

新建一個maven普通項目起名叫springcloud-api,裡面呢,放一個這樣的實體類,與表的關係對應起來的一個簡單對象,使用了lombok,這裡大家可以自行去瞭解

1、導入依賴

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

我們可以看到這裡如果正確會有一個小圓圈,如果你這裡沒有,那就要檢查下父工程依賴了

在這裡插入圖片描述

2、編寫配置,這裡沒有什麼配置,所以就是濾過

3、編寫對應代碼

在這裡插入圖片描述

provider-服務端提供者

再新建一個maven普通項目模塊,我們做服務的提供者

1、導入依賴

<dependencies>
    <dependency>
        <groupId>com.xuexi</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
    </dependency>

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
    </dependency>

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

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

2、編寫配置

新建一個application.yml文件,內容如下:

server:
  port: 8001

spring:
  application:
    name: springcloud-provider-account
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/lianxi?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8
    username: root
    password: 
    type: com.alibaba.druid.pool.DruidDataSource  #使用阿裡的數據源

# mybatis-plus配置日誌
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-aliases-package: com.xuexi.pojo
  mapper-locations: classpath:mapper/*.xml
  global-config:
    db-config:
      table-underline: true  #實體類駝峰轉下劃線,預設就是

3、編寫代碼,服務提供者我們只需要編寫dao層和service層,這裡使用了mybaits-plus所以比較簡單,直接給大家截圖

dao層

在這裡插入圖片描述

service層

在這裡插入圖片描述

在這裡插入圖片描述

這裡我們可以編寫一個controller進行下測試

@RestController
public class AccountController {

    @Autowired
    AccountService accountService;

    @PostMapping("/account/add")
    public boolean addAccount(Account account){
        return accountService.save(account);
    }

    @GetMapping("/account/get/{id}")
    public Account get(@PathVariable("id") long id){
        return accountService.getById(id);
    }

    @GetMapping("/account/list")
    public List<Account> getAll(){
        return accountService.list(null);
    }

}

測試成功
在這裡插入圖片描述

consumer-消費者

同樣的我們再建一個普通的maven子工程項目,我們進行服務的消費

1、導入依賴

<dependencies>
    <dependency>
        <groupId>com.xuexi</groupId>
        <artifactId>springcloud-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

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

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

</dependencies>

2、編寫配置

新建一個application.yml

server:
  port: 80

3、編寫代碼

代碼編寫前,我們認識一個東西,就是我們的標題,REST這個東西,這裡我覺得你學到這裡應該很容易理解,所以我覺得還是先上代碼吧

首先編寫一個config配置類,我們把RestTemplate這個對象接管到spring容器中

@Configuration
public class BeanConfig {

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

接著編寫我們的消費代碼,ConsumerController

@RestController
public class ConsumerController {
    private static final String REST_URL_PREFIX = "http://localhost:8001";

    @Autowired
    RestTemplate restTemplate;

    @PostMapping("/cousumer/add")
    public boolean addAccount(Account account) {
        return restTemplate.postForObject(REST_URL_PREFIX+"/account/add",account,boolean.class);
    }

    @GetMapping("/cousumer/get/{id}")
    public Account get(@PathVariable("id") long id) {
        return restTemplate.getForObject(REST_URL_PREFIX+"/account/get/"+id,Account.class);
    }

    @GetMapping("/cousumer/list")
    public List<Account> getAll() {
        return restTemplate.getForObject(REST_URL_PREFIX+"/account/list",List.class);
    }


}

上面我都沒有給大家說編寫springboot啟動類,別到這裡還沒啟動呀,每一個項目下麵,編寫一個這樣的啟動類

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

我們啟動下消費方,看下是否可以遠程調用服務方服務,測試成功,遠程調用了我們的服務消費掉

在這裡插入圖片描述

其實我們都學過網路請求,RestTemplate其實就是封裝好的一個請求對象,然後可以通過get|post|delete|put請求,裡面也沒有多少方法,點以下就都出來了,這麼簡單,很容易看懂並學會吧!

其實就像前後段分離,發送非同步請求,通過不斷地請求服務,然後去實現功能,一種直連的方式,對地址和埠請求服務

在這裡插入圖片描述

但是我們可以發現,這樣是有缺點的,比如provider宕機了,consumer請求是請求不到了的,而且也不能做一些檢測,負載均衡,輪詢等方式;那我們接著學習再加一層
下一篇我們嘗試下使用Eureka註冊中心,持續更新中·····

趕緊點個關註吧,之後還會更新整個springcloud系列,關註不迷路,點個贊也行啊,bye~


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

-Advertisement-
Play Games
更多相關文章
  • doc或docx(word)或image類型文件批量轉PDF腳本 1.實際生產環境中遇到文件展示只能適配PDF版本的文件,奈何一萬個文件有七千個都是word或者image類型的,由此搞個腳本批量轉換下上傳至OSS,為前端提供數據支撐。 2.環境準備,這裡使用的是aspose-words-18.6-j ...
  • 一、菜單 功能描述:顯示簡單的菜單,供用戶選擇操作 實現步驟:直接cout輸出 二、退出功能 功能描述:根據用戶不同的操作代碼選擇,進入不同的功能,我們使用switch分支結構進行搭建 實現步驟:用while(ture)迴圈包涵switch, case 0:時用return 0 ,退出迴圈,即退出通 ...
  • 序列類型 字元串 由很多個字元組成的字元序列,字元串屬於 **序列類型 序列簡介 數值類型:可以表示 數字,數值 int float bool 序列類型:存儲多個數據的一種數據類型 str : 可以存儲數字,字母,特殊符號,中文等數據.表現形式為 一對引號包囊起來的數據 list 列表 tuple ...
  • 八、HighLevelAPI 8.1、RestAPI介紹&項目導入 8.1.1、RestAPI介紹 ES官方提供了各種不同語言的客戶端,用來操作ES。這些客戶端的本質就是組裝DSL語句,通過http請求發送給ES 官方文檔地址 https://www.elastic.co/guide/en/elas ...
  • Java常用類 1.字元串相關類練習 1.1StringBuilder練習 package li.normalclass.stringbuilder; public class TestBuffer { public static void main(String[] args) { StringB ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • print函數中總是涉及到各式各樣的輸出,為了方便學習和查詢,今天在這裡特意做一個總結!註意:#後為輸出結果 1、“,”分隔 1 print("hello","world") #hello world(預設空格連接) 2、“+”連接 1 print("hello"+"world") #hellowo ...
  • 過濾器鏈分析 提起Spring Security的實現原理,很多讀者都會想到過濾器鏈。因為Spring Security中的所有功能都是通過過濾器來實現的,這些過濾器組成一個完整的過濾器鏈。那麼,這些過濾器 鏈是如何初始化的?我們前面反覆提到的AuthenticationManager又是如何初始化 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...