天天看點

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

1、IDEA建立空的父Project

IDEA和Eclipse不同,沒有工作空間的概念,是以我們都是建立一個空的父Project,然後在裡面New Module。

1.1 配置Maven

在建立Project之前,需要先配置我們的maven,要求maven的版本是3.5以上,File——Other Settings——Settings For New Projects:

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

1.2 建立空父Project

1.2.1 建立一個Project:springcloud2020

File —— New —— Project:JDK要求1.8

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80
SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

1.2.2 配置字元編碼

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

1.2.3 開啟注解生效

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

1.2.4 選擇Java編譯版本為1.8

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

1.2.5 FileType檔案過濾,删除src目錄

因為建立的工程中,會出現字尾為 .idea 和 .iml 的檔案,為了不顯示他們,可以設定FileType,過濾掉他們:

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

因為父工程不會寫代碼,是以删除src目錄。隻留下一個pom.xml檔案即可。

1.3 父工程的pom檔案

<?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>com.zdw.springcloud</groupId>
  <artifactId>springcloud2020</artifactId>
  <version>1.0-SNAPSHOT</version>
  <modules>
    <module>cloud-provider-payment8001</module>
  </modules>

  <!--打包方式-->
  <packaging>pom</packaging>

  <!--統一管理jar包版本-->
  <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.16.18</lombok.version>
    <mysql.version>8.0.19</mysql.version>
    <druid.version>1.1.16</druid.version>
    <spring.boot.version>2.2.2.RELEASE</spring.boot.version>
    <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
    <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    <druid.spring.boot.starter.version>1.1.1</druid.spring.boot.starter.version>
  </properties>

  <!--子子產品繼承後,提供作用:鎖定版本+子module不用groupId和version-->
  <dependencyManagement>
    <dependencies>
      <!--springboot 2.2.2-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring.boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--Spring cloud Hoxton.SR1-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring.cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--Spring cloud alibaba 2.1.0.RELEASE-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring.cloud.alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>${druid.spring.boot.starter.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
      </dependency>
      <!--MyBatis的依賴-->
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <!--第三方maven私服-->
  <repositories>
    <repository>
      <id>nexus-aliyun</id>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

</project>
           

dependencyManagement 和 dependency 的差別:

  • 1、dependencyManagement 一般隻會出現在父pom檔案中,它可以讓子項目引入依賴隻會,不用顯示的指定版本号,做到統一管理版本的目的。Maven會沿着父子層次向上走,直到找到一個有dependencyManagement 元素的項目,然後就會使用 dependencyManagement 指定的版本号;是以在子項目中可以不顯示的指定版本号。
  • 2、如果子項目中沒有聲明依賴,是不會從父項目中繼承下來的;隻有在子項目中聲明了該依賴項,并且沒有指定具體的版本,才會從父項目中繼承下來;
  • 3、如果子項目中顯示聲明了版本号,那麼就會使用子項目中指定的版本的依賴。

這樣做的好處就是:如果有多個子項目都引用同一樣的依賴,則可以避免在每個使用的子項目裡都聲明一個版本号,這樣想更新或切換到另一個版本時,隻需在頂層父容器裡更新,而不需要一個一個子項目的修改l;另外如果某個子項目需要另外的一個版本,隻需聲明version版本 。

2、支付子產品payment8001

2.1 五個步驟和sql檔案

1、建Module

2、改pom檔案

3、寫yml檔案

4、寫主啟動類

5、編寫業務邏輯

sql檔案:

CREATE TABLE `payment`  (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `serial` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '支付流水号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = INNODB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '支付表' ROW_FORMAT = DYNAMIC;
           

2.2 建立Module

在剛才建立的SpringCloud2020,右鍵 New —— Module ,JDK選擇1.8,不要使用Maven骨架:

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80
SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

2.3 改pom檔案

<?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">
    <parent>
        <artifactId>springcloud2020</artifactId>
        <groupId>com.zdw.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-provider-payment8001</artifactId>
    <description>支付子產品</description>

    <dependencies>
        <!--web和actuator基本是綁定到一塊使用的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--監控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--MyBatis的依賴-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!--如果沒寫版本,從父層面找,找到了就直接用,全局統一-->
            <!--<version>1.1.1</version>-->
        </dependency>

        <!--mysql-connector-java-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--熱部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
           

2.4 寫yml

server:
  port: 8001
spring:
  application:
    name: cloud-payment-service
  datasource:
    # 目前資料源操作類型
    type: com.alibaba.druid.pool.DruidDataSource
    # mysql驅動類
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cloud2020?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: 123


mybatis:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.zdw.springcloud.entities
           

2.5 編寫主啟動類

package com.zdw.springcloud;

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

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

2.6 編寫業務代碼

參見4

3、公共子產品common

因為項目中很多地方都要用到一些實體和工具類,如果在每個工程中都要建立肯定是不行的。對于這種公共的東西,我們應該進行抽取,是以可以建立一個cloud-api-common子產品,裡面主要存放的就是相關的實體類和工具類:

建立cloud-api-common子產品的方式和payment8001是一樣的,不要選maven骨架,建立之後,修改pom檔案:

3.1 改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">
    <parent>
        <artifactId>springcloud2020</artifactId>
        <groupId>com.zdw.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-api-common</artifactId>
    <description>公共子產品</description>

    <dependencies>
        <!-- 熱部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- 糊塗工具類的依賴 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool-all.version}</version>
        </dependency>
    </dependencies>
</project>
           

注意:裡面引入了hutool工具類,它的官網位址是: https://hutool.cn/docs/#/ ,它對很多我們常用的進行了封裝,我們可以直接使用。

3.2 建立實體

3.2.1 編寫Payment

package com.zdw.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data  //get/set以及toString方法
@NoArgsConstructor  //無參構造
@AllArgsConstructor //有參構造
public class Payment implements Serializable {
    private Long id;
    /**
     * 支付流水号
     */
    private String serial;
}
           

3.2.2 編寫統一的傳回結果類

package com.zdw.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data  //get/set以及toString方法
@NoArgsConstructor  //無參構造
@AllArgsConstructor //有參構造
public class CommonResult<T> {
    private Integer code;
    private String message;
    private T data;

    public CommonResult(Integer code, String message) {
        this(code, message, null);
    }
}
           

建立完成之後,我們需要執行install操作,安裝到我們的倉庫裡面,然後其他的子產品才能引入它。

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

4、編寫支付子產品payment8001的業務代碼

4.1 改pom.xml

因為我們的業務代碼需要用到cloud-api-common的實體類,是以需要在pom.xml檔案中添加cloud-api-common的依賴:

<!--引入公共子產品的依賴-->
<dependency>
    <groupId>com.zdw.springcloud</groupId>
    <artifactId>cloud-api-common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
           

4.2 編寫dao

package com.zdw.springcloud.dao;

import com.zdw.springcloud.entities.Payment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface PaymentDao {
    /**
     * 新增
     * @param payment
     */
    int create(Payment payment);

    /**
     * 根據Id查詢
     * @param id
     */
    Payment getPaymentById(@Param("id") Long id);
}
           

注意:類上要用 @Mapper 注解修飾,表明這是一個MyBatis的Mapper接口

4.3 編寫service業務層代碼

4.3.1 service業務接口

package com.atguigu.springcloud.service;

import com.atguigu.springcloud.entities.Payment;

public interface PaymentService {
    /**
     * 新增
     */
    int create(Payment payment);

    /**
     * 根據Id查詢
     */
    Payment getPaymentById(Long id);
}
           

4.3.2 service實作類

package com.atguigu.springcloud.service.impl;

import com.atguigu.springcloud.dao.PaymentDao;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PaymentServiceImpl implements PaymentService {
    @Autowired
    private PaymentDao paymentDao;

    /**
     * 新增
     */
    @Override
    public int create(Payment payment) {
        return paymentDao.create(payment);
    }

    /**
     * 根據Id查詢
     */
    @Override
    public Payment getPaymentById(Long id) {
        return paymentDao.getPaymentById(id);
    }
}
           

4.4 編寫controller

package com.zdw.springcloud.controller;

import com.zdw.springcloud.entities.CommonResult;
import com.zdw.springcloud.entities.Payment;
import com.zdw.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

@RestController
@Slf4j    //日志記錄,添加這個注解之後,可以直接使用 log
public class PaymentController {

    @Autowired
    PaymentService paymentService;

    @Value("${server.port}")//從配置檔案中擷取server.port的值
    String serverPort;

    @PostMapping(value = "payment/create")
    public CommonResult create(@RequestBody Payment payment){
        int result = paymentService.create(payment);
        if(result>0){
            return new CommonResult(200,"++插入資料庫成功,serverPort:" + serverPort, result);
        }
        return new CommonResult(444,"--插入資料庫失敗,serverPort:" + serverPort, null);
    }

    @GetMapping(value = "payment/get/{id}")
    public CommonResult<Payment> get(@PathVariable("id") Long id){
        Payment payment = paymentService.getPaymentById(id);
        log.info("*****查詢結果: " + payment);
        if (payment != null) {
            return new CommonResult(200, "查詢成功,serverPort:" + serverPort, payment);
        }
        return new CommonResult(444, "沒有對應記錄,查詢ID:" + id, null);
    }
}
           

注意:類上使用@RestController注解,相當于 @ResponseBody和@Controller,傳回的json資料;

create(@RequestBody Payment payment) :注意create方法的形參一定要使用@RequestBody進行修飾,否則,資料儲存就會不成功。

4.5 測試

4.5.1 測試create進行新增操作

需要用到PostMan工具類,因為浏覽器位址不支援post請求:

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

傳回結果成功:

{
    "code": 200,
    "message": "++插入資料庫成功111,serverPort:8001",
    "data": 1
}
           

4.5.2 測試get方法擷取資料

直接浏覽器通路:http://localhost:8001/payment/get/1 能通路到資料就是成功了,建議使用火狐浏覽器,它能格式化json資料

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

5、熱部署devtools

為了友善修改代碼,進行調試的友善,我們希望修改之後立馬生效,而不是重新開機工程。Spring為我們提供了熱部署操作。熱部署需要執行以下幾步:

5.1 添加devtools依賴

在需要熱部署的工程的pom檔案中,引入devtools依賴:

<!--熱部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
           

之前的工程payment8001在前面以及引入了該依賴。

5.2 添加一個maven插件

在pom檔案中添加下面的maven插件,本次我們可以在父Project的pom檔案中添加,這樣子項目就都可以使用了:

<build>
    <fileName>你自己的工程名字<fileName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <addResources>true</addResources>
            </configuration>
        </plugin>
    </plugins>
</build>
           

5.3 IDEA開啟自動建構

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

5.4 IDEA開啟熱注冊,更新我們的值

快捷鍵:crtl+shift+alt+/ 選擇第一個 registry

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80
SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

5.5 重新開機IDEA

然後我們修改之後,idea就會自動編譯,能立馬看到結果以及改了。

6、訂單子產品order80

6.1 建立module

SpringCloud04-編碼實作:訂單支付子產品1、IDEA建立空的父Project2、支付子產品payment80013、公共子產品common4、編寫支付子產品payment8001的業務代碼5、熱部署devtools6、訂單子產品order80

6.2 改pom

<?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">
    <parent>
        <artifactId>springcloud2020</artifactId>
        <groupId>com.zdw.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-consumer-order80</artifactId>
    <description>訂單消費者</description>

    <dependencies>
        <!--引入公共子產品-->
        <dependency>
            <groupId>com.zdw.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--web和actuator監控 一般要一起-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--熱部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
           

6.3 寫yml

server:
  port: 80
spring:
  application:
    name: cloud-consumer-order
           

6.4 主啟動類OrderMain80

package com.zdw.springcloud;

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

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

6.5 業務編碼

6.5.1 注冊RestTemplate

RestTemplate提供了多種便捷通路遠端Http服務的方法,是一種簡單便捷的通路RESTful服務的模闆類,是Spring提供的用于通路Rest服務的用戶端模闆工具集;

官方網址:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

package com.zdw.springcloud.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class OrderConfig {

    /**
     * 注冊RestTemplate
     * @return
     */
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
           

6.5.2 編寫controller

用戶端80是通過遠端調用8001的支付服務的,是以它隻要一個Controller來接受請求就可以了,不需要編寫service和dao等;

package com.zdw.springcloud.controller;

import com.zdw.springcloud.entities.CommonResult;
import com.zdw.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
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;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderController {

    //支付服務的位址
    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment){
        return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
    }

    @GetMapping("consumer/payment/get/{id}")
    public CommonResult<Payment> get(@PathVariable("id") Long id){
        log.info("====從80去查詢了8001支付子產品....");
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }
}
           

6.6 測試

浏覽器通路:http://localhost/consumer/payment/create?serial=zdw19910904 新增資料成功

浏覽器通路:http://localhost/consumer/payment/get/2 可以查詢到剛才新增的資料