欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用IDEA 搭建 SpringCloud 項目

 更新時間:2023年11月24日 10:56:51   作者:棧老師不回家  
所謂微服務,就是要把整個業(yè)務模塊拆分成多個各司其職的小模塊,做到單一職責原則,不會重復開發(fā)相同的業(yè)務代碼,實現(xiàn)真正意義上的高內聚、低耦合,這篇文章主要介紹了如何使用IDEA 搭建 SpringCloud 項目,需要的朋友可以參考下

一、前言

所謂微服務,就是要把整個業(yè)務模塊拆分成多個各司其職的小模塊,做到單一職責原則,不會重復開發(fā)相同的業(yè)務代碼,實現(xiàn)真正意義上的高內聚、低耦合。同時,微服務可以對外暴露接口,供其它微服務使用。

如果我們在 A 服務中發(fā)起一個 http 請求到 B 服務,那么就可以實現(xiàn)微服務的遠程調用。(restTemplate 的 getForObject 方法可以向瀏覽器發(fā)起請求)
這種方法看起來是可行的,但是把 url 路徑和 Java 代碼耦合到一起,是不符合開閉原則的。于是就出現(xiàn)了 Eureka 注冊中心。

每一個微服務在啟動的那一刻都需要做一件事情,就是把自己的服務信息注冊給 Eureka,比如服務名稱、服務端口等,其它微服務想要調用另一個服務的時候,直接去 Eureka 里面拉取信息就可以了。
同時,為了避免拉取的服務已經掛掉了,我們的服務每隔 30 秒就會向 Eureka 發(fā)起一次心跳,來證明自己還活著,如果有一天不跳了,Eureka 就會把它從注冊列表中剔除。

如果存在多個服務提供者,服務消費者就會利用負載均衡算法,從服務列表中挑選一個!

二、項目搭建

1. 數(shù)據庫準備

此處我們要準備兩個數(shù)據庫,user 服務和 order 服務各自擁有自己的數(shù)據庫。

CREATE TABLE USER (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
phone VARCHAR(15) NOT NULL,
address VARCHAR(50) NOT NULL
);
INSERT INTO USER VALUES (1, "棧老師不回家", 13299075426, "山西省大同市")
INSERT INTO USER(NAME, phone, address) VALUES ("肖恩", 18834267011, "山西省太原市")
INSERT INTO USER(NAME, phone, address) VALUES ("李華", 12481076533, "山西省運城市")

CREATE TABLE orders (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) NOT NULL,
price INT NOT NULL,
user_id INT NOT NULL REFERENCES USER(id)
)
INSERT INTO orders VALUES (1, "可樂雞翅", 32, 1);
INSERT INTO orders(NAME, price, user_id) VALUES("冰鎮(zhèn)啤酒", 12, 1);
INSERT INTO orders(NAME, price, user_id) VALUES("草莓冰激凌", 8, 2);
INSERT INTO orders(NAME, price, user_id) VALUES("狼牙土豆", 10, 3);

2. 創(chuàng)建父工程

① 還是 SpringBoot 項目,選擇 Spring Web 依賴

② 刪掉 src 目錄及 mvnw 開頭的兩個文件

③ 在 pom 文件中添加 packaging 標簽和 SpringCloud 版本,并修改 SpringBoot 版本

④ 引入 mysql 和 mybatis 依賴,供后續(xù)使用

⑤ 添加 SpringCloud 依賴庫,后續(xù)子模塊使用的時候就不需要再指定版本了

3. 創(chuàng)建注冊中心

① 在父級項目上新建模塊

② 選擇 Eureka Server

③ 修改子模塊的 parent 標簽內容,指向父工程

因為父模塊中已經指定了 SpringCloud 的版本,所以子模塊不需要再重復寫!

④ 在父級 pom 中添加該子模塊

⑤ 因為子類會繼承父類的依賴,所以子類中多余的依賴可以刪掉,后續(xù)需要什么加什么

⑤ 編寫 application.yml 文件

#服務端口,隨便起
server:
  port: 11011
#服務名稱
spring:
  application:
    name: eurekaserver
  datasource:
    url: jdbc:mysql:///ZXEdb?serverTimezone=UTC
    username: root
    password: 856724bb
    driver-class-name: com.mysql.cj.jdbc.Driver
#eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:11011/eureka/
    register-with-eureka: false
    fetch-registry: false

服務名稱和 eureka 地址的配置我們可以認為是服務注冊的配置,而 eureka 自己也是一個微服務,所以在服務啟動的時候,它也會把自己注冊到 eureka 上!

⑥ 啟動類上添加 @EnableEurekaServer 注解

⑦ 輸入 http://localhost:11011/,出現(xiàn)以下界面即 Eureka 創(chuàng)建成功。

4. 服務注冊

情形:
創(chuàng)建一個 order 服務和一個 user 服務,并把它們都注冊到 eureka 中。order 里面需要用到 user,所以此時的 order 是消費者,user 是提供者。

對于服務的注冊,我們只需要完成兩步:
① 引入 spring-cloud-starter-netflix-eureka-client 依賴;
② 在 yml 文件中配置服務名稱和 eureka 地址。

eureka 服務的依賴是 server,其余微服務都是 client!

① 創(chuàng)建 order 服務和 user 服務

② 引入 eureka 客戶端依賴

③ 在父級 pom 中添加該子模塊

④ 編寫 yml 配置文件

#服務端口,隨便起
server:
  port: 8081
#服務名稱
spring:
  application:
    name: userserver
  datasource:
    url: jdbc:mysql:///user?serverTimezone=UTC
    username: root
    password: 856724bb
    driver-class-name: com.mysql.cj.jdbc.Driver
#eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:11011/eureka/

④ 啟動類上添加 @EnableEurekaServer 注解

以上是 user 的注冊,order 同理!

5. 編寫業(yè)務代碼

要求查詢訂單表,其中訂單表里面包含用戶信息。

① 實體類

② 配置文件中添加駝峰命名功能及實體映射

#開啟駝峰命名及實體映射
mybatis:
  type-aliases-package: com.zxe.orderserver.pojo
  configuration:
    map-underscore-to-camel-case: true

③ 編寫數(shù)據層、業(yè)務層及控制層的代碼

6. 服務拉取

服務拉取是基于服務名稱獲取服務列表,然后再對服務列表做負載均衡。

① 在 order-service 的啟動類中注冊 RestTemplate

@LoadBalanced 注解用來做負載均衡!

② 編寫 OrderService 代碼,order 要調用 user,自然要用到 user 接口的訪問路徑,此處的路徑中我們用服務名來代替 localhost

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;
    public Order findById(Integer id) {
        Order order = orderMapper.find(id);
        String url = "http://userserver/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
        return order;
    }
}

③ 運行結果

到此這篇關于IDEA 搭建 SpringCloud 項目的文章就介紹到這了,更多相關IDEA 搭建 SpringCloud 項目內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java播放聲音類和一個簡單示例

    java播放聲音類和一個簡單示例

    這篇文章主要介紹了一個java播放聲音類和一個java播放聲音的應用程序,應用程序可以單次播放聲音、循環(huán)播放聲音,需要的朋友可以參考下
    2014-03-03
  • 淺談Java中String的常用方法

    淺談Java中String的常用方法

    今天帶大家來復習一下Java中String的常用方法,文中有非常詳細的介紹,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java設計模式之觀察者模式詳解

    Java設計模式之觀察者模式詳解

    這篇文章主要介紹了Java設計模式之觀察者模式詳解,對象之間的多對一依賴的一種設計方案,被依賴的對象為Subject,依賴的對象為Observer,Subject通知Observer變化,需要的朋友可以參考下
    2023-12-12
  • Java 程序設計總復習題(java基礎代碼)

    Java 程序設計總復習題(java基礎代碼)

    這篇文章主要介紹了Java 程序設計總復習題,主要是java基礎代碼,方便學習java的同學
    2021-05-05
  • Java并發(fā)編程進階之線程控制篇

    Java并發(fā)編程進階之線程控制篇

    在使用Java實際編程中,多線程可以說是無所不在,凡是需要并發(fā)執(zhí)行的都可以用到它,一個應用程序中不用多線程將會是很糟糕的事情,所以掌握線程以及它的控制操作是非常重要的。通過本篇文章來今天帶大家一文掌握線程控制操作,感謝您的觀看
    2022-07-07
  • Spring boot搭建web應用集成thymeleaf模板實現(xiàn)登陸

    Spring boot搭建web應用集成thymeleaf模板實現(xiàn)登陸

    這篇文章主要介紹了Spring boot搭建web應用集成thymeleaf模板實現(xiàn)登陸,頁面使用bootstrap,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java高級用法之綁定CPU的線程Thread?Affinity簡介

    java高級用法之綁定CPU的線程Thread?Affinity簡介

    java線程thread affinity是用來將java代碼中的線程綁定到CPU特定的核上,用來提升程序運行的性能,這篇文章主要介紹了java高級用法之綁定CPU的線程thread affinity的相關知識,需要的朋友可以參考下
    2022-05-05
  • 利用POI生成EXCEL文件的方法實例

    利用POI生成EXCEL文件的方法實例

    Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功能,下面這篇文章主要給大家介紹了關于利用POI生成EXCEL文件的相關資料,需要的朋友可以參考下
    2018-07-07
  • No ‘Access-Control-Allow-Origin‘ header is present跨域及解決

    No ‘Access-Control-Allow-Origin‘ header is&nb

    這篇文章主要介紹了No ‘Access-Control-Allow-Origin‘ header is present跨域及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java面向對象之內部類案例講解

    Java面向對象之內部類案例講解

    這篇文章主要介紹了Java面向對象之內部類案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08

最新評論