二、微服务拆分案例

news2025/2/27 17:19:10

文章目录

  • 一、服务拆分(order-service、user-service)
    • 1.创建数据库
    • 2.创建order-service和user-service模块,引入依赖
    • 3、order-service各层代码
    • 4、user-service各层代码

一、服务拆分(order-service、user-service)

在这里插入图片描述

1.创建数据库

#订单表
CREATE TABLE `tb_order` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
  `ordername` varchar(255) DEFAULT NULL COMMENT '订单名称',
  `price` int DEFAULT NULL COMMENT '价格',
  `num` int DEFAULT NULL COMMENT '数量',
  `userId` int DEFAULT NULL COMMENT '用户id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3

#用户表
CREATE TABLE `tb_user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(255) DEFAULT NULL COMMENT '用户名',
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3

2.创建order-service和user-service模块,引入依赖

父模块:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.9.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
    <mysql.version>8.0.25</mysql.version>
    <mybatis.version>2.1.3</mybatis.version>
</properties>

<!-- dependencyManagement 只对依赖版本进行管理,不会实际引入 jar -->
<dependencyManagement>
    <dependencies>
        <!-- springCloud 此处使用 <scope>import</scope>意味着导入了springCloud父模块的jar包依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

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

order-service模块:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.keqing</groupId>
        <artifactId>order-user</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

user-service模块:


<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

3、order-service各层代码

pojo:

@Data
public class Order {
    private Integer id;
    private String ordername;
    private Integer price;
    private Integer num;
    private Integer UserId;
    private User user;
}

mapper:

@Mapper
public interface OrderMapper {
    /**
     * 根据id查询订单
     */
    @Select("select * from tb_order where id = #{id}")
    Order getById(@Param("id") Long id);
}

service:

public interface OrderService {
    /**
     * 根据id查找订单
     */
    Order selectById(Long id);
}

service.impl:

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 根据id查找订单
     */
    @Override
    public Order selectById(Long id) {
        //1.查询订单
        Order order = orderMapper.getById(id);
        //2.利用RestTemplate发起http请求,查询用户
        //2.1 url路径
        String url = "http://userservice/user/" + order.getUserId();
        //2.2 发起http请求,将JSON反序列化为User对象
        User user = restTemplate.getForObject(url,User.class);
        order.setUser(user);
        return order;
    }
}

controller:

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/{id}")
    public Order selectOrder(@PathVariable("id") Long id){
        return orderService.selectById(id);
    }
}

config:

@Component
public class RestTemplateConfig {

    /**
     * 创建 RestTemplate 并注入 Spring 容器
     * @LoadBalanced 注解描述:负载均衡作用
     */
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

4、user-service各层代码

pojo:

@Data
public class User {
    private Integer id;
    private String username;
    private String address;
}

mapper:

@Mapper
public interface UserMapper {

    @Select("select * from tb_user where id = #{id}")
    User getById(@Param("id") Long id);
}

service:

public interface UserService {
    User selectById(Long id);
}

service.impl:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User selectById(Long id) {
        return userMapper.getById(id);
    }
}

controller:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    @GetMapping("/{id}")
    public User select(@PathVariable("id") Long id){
        return userService.selectById(id);
    }
}

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

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

相关文章

猴子也能学会的jQuery第十二期——jQuery遍历

&#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

【金融项目】尚融宝项目(十五)

29、提现和还款 29.1、提现 29.1.1、需求 放款成功后&#xff0c;借款人可以申请提现。 参考《汇付宝商户账户技术文档》3.15用户申请提现 29.1.2、前端整合 pages/user/withdraw.vue <script> export default {data() {return {fetchAmt: 0,}},methods: {commitWit…

基于SSM的宿舍财产管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86469100 主要使用技术 SpringSpringMVCMybatisEasyUIJqueryMysql 功能介绍 本系统的用户可以分为三种&#xff1a;管理员、教师、学生。 系统设置 菜单管理&#xff1a;菜单节点的增删改查…

中国传统美食网页HTML代码 学生网页课程设计期末作业下载 美食大学生网页设计制作成品下载 DW餐饮美食网页作业代码下载

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【学习笔记41】DOM操作的练习

一、回到顶部 我们在浏览页面的时候&#xff0c;当我们浏览到一个页面的底部的时&#xff0c;一般都会有一个返回底部 &#xff08;一&#xff09;案例分析 1、当页面滚动的距离大于300的时候&#xff0c;让herder和btn展示 header的top设置为0的时候就能看到btn的display设置…

web网页设计期末课程大作业——海贼王大学生HTML网页制作 HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

HTML常用标记(超详解)

目录 一、文本标记 二、列表标记 三、分割线标记 四、超链接标记 五、图片标记 六、多媒体标记 七、标记类型 八、meta标记 一、文本标记 1.标题标记 语法格式&#xff1a; <hn align"对齐方式">标题文本</hn> html中提供了六级标题&#xff…

产业经济专题:产业结构高级化、合理化指数、工业化率、机构水平化及产业升级度

一、产业关联度的密度指数 1、数据来源&#xff1a;见参考文献 2、时间跨度&#xff1a;无 3、区域范围&#xff1a;无 4、指标说明&#xff1a; 附件中包括命令和案例数据 部分数据如下&#xff1a; 计算参考文献&#xff1a; Xiao J, Boschma R, Andersson M. Industr…

分布式NoSQL数据库HBase实践与原理剖析(一)

title: HBase系列 第一章 HBase基础理论 1.1 HBase简介 Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. Apache HBase™ 是Hadoop数据库&#xff0c;是一种分布式、可扩展的大数据存储。HBase 是 BigTable 的开源 java 版本。 建立在 HDF…

SecXOps 核心技术能力划分

核心能力 为了加快安全分析能力更全面、更深入的自动化 &#xff0c;SecXOps 的目标在于创建一个集成的用于 Security 的 XOps 实践&#xff0c;提升安全分析的场景覆盖率和运营效率。SecXOps 技术并不 015 SecXOps 技术体系 是 Ops 技术在安全领域的简单加和&#xff0c;SecXO…

浏览器输入www.baidu.com的请求过程是怎么样的? 响应的过程是怎样的呢?

假设我们电脑的相关配置为&#xff1a; ip地址&#xff1a;192.168.31.37 子网掩码&#xff1a;255.255.255.0 网关地址&#xff1a;192.168.31.1 DNS地址&#xff1a;8.8.8.8 1. DNS 解析 我们打开一个浏览器&#xff0c;请求ww.baidu.com地址&#xff0c;这个时候找DNS 服务…

梅西进球了,用Python预测世界杯冠军是 ... 网友:痛,太痛了

今天凌晨&#xff0c;夺冠热门阿根廷终于赢球了&#xff0c;梅西也打进了自己本届世界杯的第一粒进球&#xff01;你熬夜看这场比赛了吗&#xff1f; 小编也用Python预测了一下本届世界杯的冠军归属&#xff0c;结果却不是阿根廷&#xff0c;来一起看看吧~ 预测结果 根据Pyt…

《QEMU/KVM源码分析与应用》读书笔记4 —— 第2章 QEMU基本组件(1)

2.1 QEMU事件循环机制 2.1.1 glibc事件循环机制 知识提炼&#xff1a; glib事件循环机制 QEMU程序的运行基于各类文件fd事件&#xff0c;QEMU在运行过程中会将自己感兴趣的文件fd添加到其监听列表上&#xff0c;并定义相应的处理函数。在QEMU主线程中&#xff0c;有一个循环…

JS--数组类型 Array 1

数组是一种特殊的对象&#xff0c;数组是按照顺序排列的一组值&#xff08;元素&#xff09;&#xff0c;每个位置都有一个编号&#xff0c;编号从0开始&#xff0c;编号也叫索引或者下标。数组可以存储任意数据类型。 一 、 创建数组方法 1.用[ ] <script>// 数字的…

【机器学习项目实战10例】(二):利用LightGBM实现天气变化的时间序列预测

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 + 数据集 + 完整源码🐶🦜【机器学习项目实战10例目录】项目详解 + 数据集 +

MyBatis-Plus快速开发

1. 代码生成器原理分析 观察我们之前写的代码&#xff0c;会发现其中也会有很多重复内容&#xff0c;比如&#xff1a; 那我们就想&#xff0c;如果我想做一个Order模块的开发&#xff0c;是不是只需要将内容全部更换成Order即可&#xff0c;如&#xff1a; 所以我们会发现&am…

【Ctool】json 转 mysql

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ 编写js实现json转mysql效果图代码及注释2️⃣ 集成到ctool中src/views/tool/json.vuesrc/views/tool/library/json/index.js效果图&#x1f4d6; 参考资料&#x1f6eb; 导读 需求 获取某json格式的数据后&#xff0c;希望将它…

【csdn】gitcode初体验(开发云、Pages等)(持续更新)

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ 开发云上免密提交代码【https方式】gitcode页面直接进入开发云2️⃣ 【git方式】通过开发云主页创建项目实现免密更新git1. 通过gitcode页面获取git地址2. 创建并配置SSH公钥&#xff08;所有项目&#xff0c;公用一个公钥&…

【学生网页设计作品 】关于HTML公益主题网页设计——谨防电信诈骗网

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

yocto meta-st-stm32mp conf文件夹分析

meta-st-stm32mp conf文件夹分析 machine conf分析 本节主要分析conf/machine下面的文件 stm32mp1.conf 包含inc文件 include conf/machine/include/st-machine-common-stm32mp.inc include conf/machine/include/st-machine-providers-stm32mp.incst-machine-providers-…