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

news2024/11/16 1:52:52

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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA入门系列14--VGA

文章简介 本系列文章主要针对FPGA初学者编写&#xff0c;包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解&#xff0c;旨在更快速的提升初学者在FPGA开发方面的能力&#xff0c;每一个章节中都有针对性的代码…

06 - 3 事件驱动架构模式——EDA

何为EDA 事件驱动架构是一种异步分发事件的架构模式用于高扩展且低耦合的系统以事件为核心&#xff0c;一系列解耦的、单一功能的事件处理器 Notification 源系统发送消息通知其他系统状态改变接收方响应非必须发送 Event 逻辑与处理 Event 逻辑无依赖&#xff0c;独立变化解…

华为路由WS5200 四核版使用体验

文章目录 前言一、主界面和上网设置二、网络WIFI设置三、安全和系统总结 前言 其实我是看不上这种除了能上网&#xff0c;没任何用的东东的。除了上古时代用过类似的简单设备&#xff0c;已经十数年没再看一眼这种东西了&#xff0c;当然更不会去买这种东西&#xff0c;别误会…

vscode配置latex

reference&#xff1a;https://zhuanlan.zhihu.com/p/166523064 1 texlive卸载 找到texlive\2019\tlpkg\installer下的uninst.bat文件并点击运行。 删除环境变量 2 texlive安装 打开https://tug.org/texlive/acquire-iso.html点击下载iso文件 3 vscode 安装 4 latex插件…

Linux系统编程 多线程基础

文章目录 前言一、线程概念二、线程的创建三、线程的退出四、pthread_join函数总结 前言 本篇文章作为多线程的入门讲解将带大家先创建几个线程来感受一下什么是多线程&#xff0c;了解一下多线程到底有什么作用。 一、线程概念 线程&#xff08;Thread&#xff09;是程序执…

C++类与对象(二)——构造函数与析构函数

文章目录 一.类的默认6个成员函数二.构造函数1.引例2.构造函数的概念及特性 三.析构函数&#x1f60b;析构函数的特性 前言&#xff1a; 上篇文章初步认识了类以及类的相关知识&#xff0c;本篇将继续深入学习类与对象——类的默认6个成员函数&#xff1a; 一.类的默认6个成员函…

制造企业如何跨越大规模定制鸿沟?中国最大减速机企业的答案来了

导读&#xff1a;传统制造企业如何深度用云&#xff1f; 在中国制造向中国智造的转型中&#xff0c;长三角地区一直扮演着急先锋的角色。总部位于常州的江苏国茂减速机股份有限公司(简称国茂股份)&#xff0c;就是中国制造上云转型的典型代表。 国茂股份成立于1993年&#xff0…

Microelectronic学习章节总结(2)-- data path和control unit设计

文章目录 part1. Data path设计1.1 logic unit1.2 shifter1.3 adder1.4 comparator1.5 multiplier1.6 divider1.7 register file part2. Control unit设计part3. CPU SoC上的其它部件 (TODO&#xff1a;理解总结)3.1 总线AMBA&#xff08;parallel&#xff09; 3.2 Memorymemor…

[C++基础]-类和对象(下)

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、深入学…

推荐算法实战项目:AFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由浙江大学联合新加坡国立大学提出的AFM模型。通过名字也可以看出&#xff0c;此模型又是基于FM模型的改进&#xff0c;其中A代表”Attention“&#xff0c;即AFM模型实际上是在FM模型中引入了注意力机制改进得来的。 之所以要在FM模型中引入注意力机制&#xf…

PC3-管理员操作

token无效可能&#xff0c;就是token过期了需要配置&#xff1a;&#xff1a;&#xff1a; history 安装可以跳路由在ts文件中&#xff1a;因为在ts文件中还需要store&#xff0c;清空token // 安装可以跳路由在ts文件中npm i history 防止接口出现 token 无效&#xff0c;登…

【C++】AVL平衡二叉树源码剖析

目录 概述 算法 左单旋 右单旋 左右双旋 右左双旋 源码 AVLTree.h test.cpp 概述 AVL树也叫平衡二叉搜索树&#xff0c;是二叉搜索树的进化版&#xff0c;设计是原理是弥补二叉搜索树的缺陷&#xff1a;当插入的数据接近于有序数列时&#xff0c;二叉搜索树的性能严重…

20天能拿下PMP吗?

新版大纲&#xff0c;专注于人员、过程、业务环境三个领域&#xff0c;内容贯穿价值交付范围&#xff08;包括预测、敏捷和混合的方法&#xff09;。除了考试时间由240分钟变更为230分钟、200道单选题变为180道&#xff08;包含单选和多选&#xff09;之外&#xff0c;新考纲还…

【Ubuntu18配置Anaconda深度学习环境】

参考&#xff1a;Ubuntu18配置与ROS 兼容的深度学习环境&#xff08;Anaconda3PyTorch1.10python3.8cuda10.2&#xff09; 1. 前言 之前在Window下安装了Anaconda&#xff0c;熟悉了一下安装过程&#xff0c;Ubuntu18.04下最难的应该就是和ROS Melodic的兼容问题。ROS1是基于P…

Linux常用命令——inotifywait命令

在线Linux命令查询工具 inotifywait 异步文件系统监控机制 补充说明 Inotify一种强大的、细粒度的、异步文件系统监控机制&#xff0c;它满足各种各样的文件监控需要&#xff0c;可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作&#xff0c;也就是可…

数据结构之第十一章、排序算法

一、排序的概念及引用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 1.1.1排序的稳定性 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具…

数据结构之第九章、优先级队列(堆)

目录 一、优先级队列 1.1概念 二、优先级队列的模拟实现 2.1堆的概念 2.2堆的存储方式 2.3堆的创建 2.3.1堆向下调整 2.3.2堆的创建 2.3.3建堆的时间复杂度 2.4堆的插入与删除 2.4.1堆的插入 2.4.2堆的删除 2.5用堆模拟实现优先级队列 三、常用接口介绍 3.1Priori…

计算机组成原理与体系结构

目录 第一章、计算机组成原理与体系结构1、数据的表示1.1.进制转换1.2.原码、反码、补码、移码1.3.数据的表述 2、计算机结构3、Flynn分类法4、CISC与RISC5、流水线技术5.1、流水线的基本概念5.2、流水线的计算5.3、流水线吞吐率计算5.4、流水线加速比计算5.5、流水线的效率 6、…

Python小姿势 - Python的多线程编程

Python的多线程编程 Python的多线程编程提供了一个非常简单的方法来让一个Python程序同时运行多个任务。这个方法通过创建新的线程来实现&#xff0c;线程可以被视为一个单独的执行流程。 为了创建一个新线程&#xff0c;我们需要使用Python的_thread模块中的start_new_thread(…

【IDEA】简单入门:请求数据库表数据

目录 修改编辑与控制台字体大小 二、sprintboot项目入门 【1】直接开始配置Controller 【2】直接请求数据库中的数据&#xff0c;返回json格式 &#xff08;0&#xff09;整合PostgreSQL框架 &#xff08;2&#xff09;实体entity类 &#xff08;3&#xff09;控制类Mai…