SpringCloud——代码demo(二)

SpringCloud------代码demo(二)

编码实操
以订单——支付微服务模块作为基础,开始逐渐扩充

微服务架构编码构建

1.约定 > 配置 > 编码
2.IDEA新建project工作空间
3.Rest微服务工程构建

总父工程
POM
project
module

首先创建maven项目project:

项目编码配置:
字符编码选择:
在这里插入图片描述
注解生效配置:
选择Default
在这里插入图片描述
项目jdk版本配置:
在这里插入图片描述

父工程pom文件设置:

删掉父工程中的src目录
1.maven坐标以及打包方式

<groupId>com.springcloud2022</groupId>
  <artifactId>SpingCloudDemo1</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--  修改打包方式,pom总的父工程-->
  <packaging>pom</packaging>

2.统一管理jar包版本,紧跟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.18.10</lombok.version>
    <mysql.version>8.0.18</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>

3.父工程配置依赖管理
dependencyManagement作用:
子模块继承之后,提供作用,锁定版本+子module不用写groupId和version
(用于父类管理,一般是最顶层的父pom才会使用)
【dependencyManagement只是声明依赖,但是并不引入依赖。 因此子项目需要显示的声明需要引入的依赖

maven跳过单元测试

在IDEA中标注跳过单元测试,能够有效的加快项目的启动速度
在这里插入图片描述
父工程创建完成执行mvn:install 将父工程发布到仓库方便子工程继承.

完整的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.springcloud2022</groupId>
  <artifactId>SpingCloudDemo1</artifactId>
  <version>1.0-SNAPSHOT</version>
<!--  修改打包方式-->
  <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.18.10</lombok.version>
    <mysql.version>8.0.18</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>

  <!--dependencyManagement作用:子模块继承之后,提供作用:锁定版本+子module不用写groupId和version-->
  <!--子module引入了版本号,就是用子module的-->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>3.0.0</version>
      </dependency>
      <!--spring boot 2.2.2-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud Hoxton.SR1-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud 阿里巴巴-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--mysql-->
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
        <scope>runtime</scope>
      </dependency>
      <!-- druid-->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <!--mybatis-->
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
      </dependency>
      <!--junit-->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>
      <!--log4j-->
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.7.5</version>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

Rest微服务

客户端消费者:8080
服务提供者:8001

构建步骤

1.cloud-provider-payment8001(微服务提供者支付Module模块)
2.热部署Devtools
3.cloud-consumer-order80
4.工程重构

1.构建cloud-provider-payment8001

生产者构建

1.创建module
2.改POM
3.写YML
4.主启动
5.业务类

pom文件:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.springcloud2022</groupId>
        <artifactId>SpingCloudDemo1</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>cloud-provider-payment8001</artifactId>
    <name>Archetype - cloud-provider-payment8001</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <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.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
<!--            <version></version>-->
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <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>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

YML文件
【注意需要新建application.yml文件】,并且文件类型要求为绿叶子形状

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource   # 当前数据库驱动类型
  	driver-class-name: com.mysql.cj.jdbc.Driver  # mysql驱动盘
 	url: jdbc:mysql://xxxxx:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&connectTimeout=2300
  	username: root
  	password: 123456

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.provider.springcloud.**.entity # entity所在的路径

新建主启动类

package com.provider.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.构建cloud-consumer-order80

消费者构建cloud-consumer-order80
与生产者构建步骤相同。不同点在于端口号不同
1.先采用RestTemplate 进行Http接口调用
RestTemplate代码:

RestTemplate 提供了多种便捷访问远程Http服务的方法。
是一种简单便捷访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集。
使用restTemplate访问restful接口非常的简单粗暴无脑
(url,requestMap,ResponseBean.class)这三个参数分别代表
REST请求地址、请求参数、Http响应转换成的对象类型。

新建ApplicationContextConfig 远程调用配置类

/**
 * RestTemplate 配置类类
 */
@Configuration
public class ApplicationContextConfig {

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

controller业务代码

@AllArgsConstructor
@RestController
@RequestMapping("/consumer")
public class BnsBarcodeRegexController {
    @Autowired
    private RestTemplate restTemplate;

    public static final String URL = "http://localhost:8001";

    /**
     * 通过调用RestTemplate,调用生产者接口
     */
    @GetMapping("/create")
    public CommonResult<BnsBarcodeRegex> create(BnsBarcodeRegex regexDto){
        return restTemplate.postForObject(URL+"/bnsBarcodeRegex/create",regexDto,CommonResult.class);


    }

    /**
     * 通过调用RestTemplate,调用生产者接口
     */
    @GetMapping("/parsingRegex")
    public CommonResult<BnsBarcodeRegex> parsingRegex(@RequestParam("id") String id){
        return restTemplate.postForObject(URL+"/bnsBarcodeRegex/parsingRegex",id,CommonResult.class);
    }
}

3.构建cloud-api-common

工程重构——将消费者和生产者中相同的代码抽象出来,比如entity部分
抽象出来,打成包,然后子模块引入依赖。
新建一个 cloud-api-commons(可以放重复的代码、以及api接口、一些工具类等等)

构建cloud-api-common的目的是由于生产者、消费者都使用了相同的实体类:BnsBarcodeRegex、CommonResult。
因此需要将其抽象出来。
通过:
mvn:insatll 命令
1.将生产者、消费者的实体类文件夹删除
2.在生产者、消费者的pom文件中引入cloud-api-common的依赖。

<dependency>
            <groupId>com.springcloud2022</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>