• 实现Springcloud跨项目相互调用(简易版)


    目录

    一,前置准备

    技术选型

    模块设计

    二,项目准备

    2.1 创建一个父工程 

    maven项目 选中jdk

      创建完成过后更改maven地址

     pom.xml文件中添加依赖 锁定版本

    对应的版本对应关系表:

     2.2 创建基础模块

     导入基础模块的pom依赖

     2.2 创建实体类

    Order

     Product 

     User 

    2.3 创建用户微服务

    步骤:

     1 创建模块 导入依赖

     手动继承父工程

    (创建SpringBoot主类)​编辑

     添加依赖

    微服务模块设计

    修改yml文件

    2.4 创建商品微服务(步骤同上)

    2.5 创建订单微服务(步骤同上)

    三,实现跨项目调用

    创建必要的接口和实现类(controller service dao) 

    3.1用户微服务Controller代码编写

     3.2 商品微服务Controller代码编写

     3.3订单微服务Controller代码编写

    ​编辑启动订单微服务调用:

    调用成功: ​编辑


    一,前置准备

    我们本次是使用的电商项目中的商品、订单、用户为案例进行讲解。

    技术选型

    maven:3.5.4

    数据库:MySQL 5.7

    持久层: SpingData Jpa/Mybatis-plus

    其他: SpringCloud Alibaba 技术栈

    模块设计

     springcloud-shop父工程

    shop-common 公共模块【实体类】

    shop-user 用户微服务 【端口: 807x】

    shop-product 商品微服务 【端口: 808x】

    shop-order 订单微服务 【端口: 809x】

    二,项目准备

    2.1 创建一个父工程 

    maven项目 选中jdk

     项目名与存放地址

      创建完成过后更改maven地址

     由于我们不需要在src中编写代码,所以可以直接将他删除

     pom.xml文件中添加依赖 锁定版本

    
    
    1.8
    UTF-8
    UTF-8
    2.3.2.RELEASE
    Hoxton.SR9
    2.2.6.RELEASE
    
    
    
        
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        
    

     在这里我们需要注意的一点事Springcloud与Springboot的版本问题:

    这里给出

    对应的版本对应关系表:

    版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHubSpring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware. - 版本说明 · alibaba/spring-cloud-alibaba Wikihttps://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

     2.2 创建基础模块

    基础模块也是Maven项目所以步骤和上面创建父工程一样

     在这里区别创建Maven和Springboot项目,我们创建Maven项目,在父工程的pom.xml中会自动的产生子模块的标记:而springboot项目需要自己手动添加 

     导入基础模块的pom依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframework.bootgroupId>
    4. <artifactId>spring-boot-starter-data-jpaartifactId>
    5. dependency>
    6. <dependency>
    7. <groupId>org.projectlombokgroupId>
    8. <artifactId>lombokartifactId>
    9. dependency>
    10. <dependency>
    11. <groupId>com.alibabagroupId>
    12. <artifactId>fastjsonartifactId>
    13. <version>1.2.56version>
    14. dependency>
    15. <dependency>
    16. <groupId>mysqlgroupId>
    17. <artifactId>mysql-connector-javaartifactId>
    18. <version>5.1.44version>
    19. dependency>
    20. dependencies>

     2.2 创建实体类

    在common子项目中添加代码 公共模块主要就是添加一些实体类 工具包等等

    Order

    1. package com.ljj.entity;
    2. import lombok.Data;
    3. import javax.persistence.Entity;
    4. import javax.persistence.GeneratedValue;
    5. import javax.persistence.GenerationType;
    6. import javax.persistence.Id;
    7. /**
    8. * @author ljj
    9. * @site www.xiaomage.com
    10. * @company
    11. * @create  2022-11-26 21:06
    12. */
    13. //订单
    14. @Entity(name = "shop_order")
    15. @Data
    16. public class Order {
    17. @Id
    18. @GeneratedValue(strategy = GenerationType.IDENTITY)
    19. private Long oid;//订单id
    20. //用户
    21. private Integer uid;//用户id
    22. private String username;//用户名
    23. //商品
    24. private Integer pid;//商品id
    25. private String pname;//商品名称
    26. private Double pprice;//商品单价
    27. //数量
    28. private Integer number;//购买数量
    29. }

     Product 

    1. package com.ljj.entity;
    2. import lombok.Data;
    3. import javax.persistence.Entity;
    4. import javax.persistence.GeneratedValue;
    5. import javax.persistence.GenerationType;
    6. import javax.persistence.Id;
    7. //商品
    8. @Entity(name = "shop_product")
    9. @Data
    10. public class Product {
    11. @Id
    12. @GeneratedValue(strategy = GenerationType.IDENTITY)
    13. private Integer pid;//主键
    14. private String pname;//商品名称
    15. private Double pprice;//商品价格
    16. private Integer stock;//库存
    17. }

     User 

    1. package com.ljj.entity;
    2. import lombok.Data;
    3. import javax.persistence.Entity;
    4. import javax.persistence.GeneratedValue;
    5. import javax.persistence.GenerationType;
    6. import javax.persistence.Id;
    7. //用户
    8. @Entity(name = "shop_user")//实体类跟数据表的对应
    9. @Data//不再去写set和get方法
    10. public class User {
    11. @Id
    12. @GeneratedValue(strategy = GenerationType.IDENTITY)//数据库自增
    13. private Integer uid;//主键
    14. private String username;//用户名
    15. private String password;//密码
    16. private String telephone;//手机号
    17. }

    2.3 创建用户微服务

    步骤:

    1 创建模块 导入依赖

    2 创建SpringBoot主类

    3 加入配置文件

     1 创建模块 导入依赖

     直接下一步

     手动继承父工程

    (创建SpringBoot主类)

     添加依赖

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>com.ljjgroupId>
    7. <artifactId>shop-commonartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. dependency>

    由此可见,在基础模块里面,我们可以定义一些共有的pom依赖,比如:数据库连接,解析json对象 lombok组件

    由于微服务需要同时启动 所以我们需要修改端口

    微服务模块设计

     2 创建SpringBoot主类

    springcloud-shop父工程

    shop-common 公共模块【实体类】

    shop-user 用户微服务 【端口: 807x】

    shop-product 商品微服务 【端口: 808x】

    shop-order 订单微服务 【端口: 809x】

    修改yml文件

    2.4 创建商品微服务(步骤同上)

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>com.ljjgroupId>
    7. <artifactId>shop-commonartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. dependency>

    2.5 创建订单微服务(步骤同上)

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>com.ljjgroupId>
    7. <artifactId>shop-commonartifactId>
    8. <version>1.0-SNAPSHOTversion>
    9. dependency>

    三,实现跨项目调用

    创建必要的接口和实现类(controller service dao) 

    3.1用户微服务Controller代码编写

    1. package com.ljj.shopuser;
    2. import com.ljj.entity.User;
    3. import org.springframework.web.bind.annotation.PathVariable;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. @RequestMapping("/user")
    7. @RestController
    8. public class UserController {
    9. @RequestMapping("/get/{id}")
    10. public User get(@PathVariable("id") Integer id){
    11. // 查询数据库
    12. return new User(id,"ljj","123456","666");
    13. }
    14. }

     3.2 商品微服务Controller代码编写

    1. package com.ljj.shopproduct;
    2. import com.ljj.entity.Product;
    3. import org.springframework.web.bind.annotation.PathVariable;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.RestController;
    6. @RestController
    7. @RequestMapping("/product")
    8. public class ProductController {
    9. @RequestMapping("/get/{pid}")
    10. public Product get(@PathVariable("pid") Integer pid){
    11. Product p = new Product(pid, "牛排", 36d, 36);
    12. return p;
    13. }
    14. }

     3.3订单微服务Controller代码编写

    1. package com.ljj.shoporder;
    2. import com.ljj.entity.Order;
    3. import com.ljj.entity.Product;
    4. import com.ljj.entity.User;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.PathVariable;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. import org.springframework.web.client.RestTemplate;
    10. @RequestMapping("/order")
    11. @RestController
    12. public class OrderController {
    13. @Autowired
    14. private RestTemplate restTemplate;
    15. @RequestMapping("/get/{uid}/{pid}")
    16. public Order get(@PathVariable("uid") Integer uid,
    17. @PathVariable("pid") Integer pid){
    18. User user = restTemplate.getForObject("http://localhost:8070/user/get/" + uid, User.class);
    19. Product product = restTemplate.getForObject("http://localhost:8080/product/get/" + pid, Product.class);
    20. Order order = new Order();
    21. order.setNumber(product.getStock());
    22. order.setOid(System.currentTimeMillis());
    23. order.setPid(pid);
    24. order.setPname(product.getPname());
    25. order.setPprice(product.getPprice() * order.getNumber());
    26. order.setUid(user.getUid());
    27. order.setUsername(user.getUsername());
    28. return order;
    29. }
    30. }

     本次将使用订单服务微服务调用用户以及商品的微服务,我们先启动用户以及商品的微服务 最后使用订单微服务调用

     

    启动订单微服务调用:

    微服务之间采用Restful等轻量级http协议相互调用

    在启动类中添加

     @SpringBootApplication注解包含了配置类 代表当前启动类就是可以当作一个配置类来使用

    调用成功: 

  • 相关阅读:
    Linux IP地址、主机名
    Minium:专业的小程序自动化工具
    P5804 [SEERC2019] Absolute Game
    MySql ocp认证之备份与恢复(四)
    Ubuntu 安装 CUDA 与 CUDNN GPU加速引擎
    Python——Python基础编程题目
    数据集笔记:NGSIM (next generation simulation)
    书生·浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版)
    C#,怎么修改(VS)Visual Studio 2022支持的C#版本
    lvgl8.3.5版本 设置界面滚动条显示状态
  • 原文地址:https://blog.csdn.net/weixin_64313980/article/details/128056558