SpringCloud微服务项目搭建入门

简介: SpringCloud微服务项目搭建入门

文章目录

介绍

本篇将以springboot+mybatis-plus搭建一个简单的微服务项目,包括几个简单表用户表,商品表,订单表,库存表。以resttemplate进行模块之间的相互调用。

建表sql和数据

表脚本

-- test.`user` definition

CREATE TABLE `user` (

 `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户Id',

 `user_name` varchar(100) NOT NULL COMMENT '用户名字',

 `user_age` int DEFAULT NULL COMMENT '用户年龄',

 `user_phone` varchar(11) DEFAULT NULL COMMENT '联系电话',

 `user_mail` varchar(100) DEFAULT NULL COMMENT '邮箱',

 `user_address` varchar(100) DEFAULT NULL COMMENT '用户地址',

 `user_status` varchar(1) DEFAULT NULL COMMENT '用户状态',

 `update_by` varchar(100) DEFAULT NULL COMMENT '更新人',

 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 `create_by` varchar(100) DEFAULT NULL COMMENT '创建人',

 `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

 PRIMARY KEY (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- test.product definition

CREATE TABLE `product` (

 `product_id` int NOT NULL AUTO_INCREMENT COMMENT '商品ID',

 `product_name` varchar(100) DEFAULT NULL COMMENT '商品名称',

 `product_type` varchar(10) DEFAULT NULL,

 `product_price` decimal(10,0) DEFAULT NULL COMMENT '商品价格',

 `create_by` varchar(100) DEFAULT NULL COMMENT '创建人',

 `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

 `update_by` varchar(100) DEFAULT NULL COMMENT '更新人',

 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 PRIMARY KEY (`product_id`),

 KEY `product_product_type_IDX` (`product_type`,`product_name`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表';

-- test.stock definition

CREATE TABLE `stock` (

 `stock_id` int NOT NULL AUTO_INCREMENT COMMENT '库存主键',

 `product_id` int NOT NULL COMMENT '商品ID',

 `stock_num` int DEFAULT NULL COMMENT '库存数量',

 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 `create_by` varchar(100) DEFAULT NULL COMMENT '创建人',

 `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

 `update_by` varchar(100) DEFAULT NULL COMMENT '更新人',

 PRIMARY KEY (`stock_id`),

 KEY `stock_product_id_IDX` (`product_id`) USING BTREE,

 CONSTRAINT `stock_FK` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`)

) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='库存表';

-- test.`order` definition

CREATE TABLE `order` (

 `order_id` int NOT NULL AUTO_INCREMENT COMMENT '订单ID',

 `order_no` int DEFAULT NULL COMMENT '订单号',

 `product_id` int DEFAULT NULL COMMENT '产品id',

 `user_id` int DEFAULT NULL COMMENT '用户ID',

 `order_num` int DEFAULT NULL COMMENT '订单产品数量',

 `order_amt` decimal(10,2) DEFAULT NULL COMMENT '订单金额',

 `order_status` varchar(10) DEFAULT NULL COMMENT '订单状态',

 `pay_status` varchar(10) DEFAULT NULL COMMENT '支付状态',

 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

 `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

 `create_user` varchar(10) DEFAULT NULL COMMENT '创建人',

 `update_user` varchar(10) DEFAULT NULL COMMENT '更新人',

 PRIMARY KEY (`order_id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单表';

表数据

INSERT INTO test.`user`

(user_id, user_name, user_age, user_phone, user_mail, user_address, user_status, update_by, create_time, create_by, update_time)

VALUES(1, 'elite', 24, '18388888888', '18388888888@163.com', 'xx省xx市xx区', '1', NULL, '2022-09-06 13:17:24', NULL, '2022-09-06 13:17:30');

INSERT INTO test.`user`

(user_id, user_name, user_age, user_phone, user_mail, user_address, user_status, update_by, create_time, create_by, update_time)

VALUES(3, 'test', 22, '18366666666', '18366666666@163.com', 'xx省xx市xx区', '1', NULL, '2022-09-06 15:10:59', NULL, '2022-09-06 15:10:59');

INSERT INTO test.product

(product_id, product_name, product_type, product_price, create_by, update_time, update_by, create_time)

VALUES(1, '华为', '手机', 5999, NULL, '2022-09-06 15:12:29', NULL, '2022-09-06 15:12:29');

INSERT INTO test.product

(product_id, product_name, product_type, product_price, create_by, update_time, update_by, create_time)

VALUES(2, '小米', '手机', 4999, NULL, '2022-09-06 15:12:29', NULL, '2022-09-06 15:12:29');

INSERT INTO test.product

(product_id, product_name, product_type, product_price, create_by, update_time, update_by, create_time)

VALUES(3, 'OPPO', '手机', 3999, NULL, '2022-09-06 15:12:29', NULL, '2022-09-06 15:12:29');

INSERT INTO test.product

(product_id, product_name, product_type, product_price, create_by, update_time, update_by, create_time)

VALUES(4, '联想拯救者', '电脑', 8999, NULL, '2022-09-06 15:13:43', NULL, '2022-09-06 15:13:43');

INSERT INTO test.product

(product_id, product_name, product_type, product_price, create_by, update_time, update_by, create_time)

VALUES(5, 'Dell', '电脑', 6999, NULL, '2022-09-06 15:13:43', NULL, '2022-09-06 15:13:43');

INSERT INTO test.product

(product_id, product_name, product_type, product_price, create_by, update_time, update_by, create_time)

VALUES(6, '华为mate', '电脑', 7999, NULL, '2022-09-06 15:13:43', NULL, '2022-09-06 15:13:43');

INSERT INTO test.stock

(stock_id, product_id, stock_num, create_time, create_by, update_time, update_by)

VALUES(1, 1, 100, '2022-09-06 15:19:18', 'elite', '2022-09-06 15:19:18', 'elite');

INSERT INTO test.stock

(stock_id, product_id, stock_num, create_time, create_by, update_time, update_by)

VALUES(6, 6, 100, '2022-09-06 15:19:18', 'elite', '2022-09-06 15:19:18', 'elite');

INSERT INTO test.stock

(stock_id, product_id, stock_num, create_time, create_by, update_time, update_by)

VALUES(5, 5, 100, '2022-09-06 15:19:18', 'elite', '2022-09-06 15:19:18', 'elite');

INSERT INTO test.stock

(stock_id, product_id, stock_num, create_time, create_by, update_time, update_by)

VALUES(4, 4, 100, '2022-09-06 15:19:18', 'elite', '2022-09-06 15:19:18', 'elite');

INSERT INTO test.stock

(stock_id, product_id, stock_num, create_time, create_by, update_time, update_by)

VALUES(3, 3, 100, '2022-09-06 15:19:18', 'elite', '2022-09-06 15:19:18', 'elite');

INSERT INTO test.stock

(stock_id, product_id, stock_num, create_time, create_by, update_time, update_by)

VALUES(2, 2, 100, '2022-09-06 15:19:18', 'elite', '2022-09-06 15:19:18', 'elite');

INSERT INTO test.`order`

(order_id, order_no, product_id, user_id, order_num, order_amt, order_status, pay_status, create_time, update_time, create_user, update_user)

VALUES(1, 1, 1, 1, 2, 0.00, '已发货', '支付完成', '2022-08-21 08:32:40', '2022-08-21 10:48:44', 'user1', 'user2');

INSERT INTO test.`order`

(order_id, order_no, product_id, user_id, order_num, order_amt, order_status, pay_status, create_time, update_time, create_user, update_user)

VALUES(3, 2, 2, 1, 2, 20.00, '取消下单', '未支付', '2022-08-21 11:20:29', '2022-08-21 11:20:29', 'annotation', 'annotation');

INSERT INTO test.`order`

(order_id, order_no, product_id, user_id, order_num, order_amt, order_status, pay_status, create_time, update_time, create_user, update_user)

VALUES(4, 4, 1, 1, 2, 20.00, '下单', '支付', '2022-08-21 11:25:09', '2022-08-21 11:25:09', 'annotation', 'annotation');

INSERT INTO test.`order`

(order_id, order_no, product_id, user_id, order_num, order_amt, order_status, pay_status, create_time, update_time, create_user, update_user)

VALUES(6, 3, 3, 3, 2, 30.00, '发货', '支付', '2022-08-22 00:38:30', '2022-08-22 00:38:30', 'plus', 'plus');

INSERT INTO test.`order`

(order_id, order_no, product_id, user_id, order_num, order_amt, order_status, pay_status, create_time, update_time, create_user, update_user)

VALUES(7, 3, 3, 3, 2, 30.00, '下单', '未支付', '2022-08-22 00:47:29', '2022-08-22 00:47:29', 'plus', 'plus');

项目结构

38df92298a4e4cb0a33c4df1a722e018.png

common模块

common存放公共的实体,这里只贴一个实体,其他的后续会上传。

 

/**

* 商品表

*/

@Data

@EqualsAndHashCode(callSuper = false)

@TableName("`product`")

public class Product {

   /**

    * 商品ID

    */

   @TableId(value = "product_id", type = IdType.AUTO)

   private Integer productId;

   /**

    * 商品名

    */

   @TableField(value = "product_name")

   private String productName;

   /**

    * 商品分类

    */

   @TableField(value = "product_type")

   private String productType;

   /**

    * 商品分类

    */

   @TableField(value = "product_price")

   private BigDecimal productPrice;

   //创建人

   @TableField(value = "create_by")

   private String createBy;

   //创建时间

   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

   @TableField(value = "create_time",fill = FieldFill.INSERT)

   private String createTime;

   //更新人

   @TableField(value = "update_by")

   private String updateBy;

   //更新时间

   @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

   @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)

   private String updateTime;

}

user服务模块

mybtias的部分就不多说了,不清楚可以看我前边的博客。Springboot整合MybatisPlus

controller代码:

/**

* <p>

*  前端控制器

* </p>

*

* @author elite

* @since 2022-09-06

*/

@RestController

@RequestMapping("/springcloud/user")

public class UserController {

   @Autowired

   IUserService userService;

   /**

    * 获取用户列表

    * @return

    */

   @GetMapping("/getUserList")

   public List<User> getUserList(){

       return userService.list();

   }

   /**

    * 获取用户

    * @param user_id

    * @return

    */

   @GetMapping("/getUserByUseId/{user_id}")

   public User getUserByUseId(@PathVariable("user_id")Integer  user_id){

       return userService.getById(user_id);

   }

}

商品服务模块

同理,这里只贴controller层代码.

/**

* /springcloud/product/getProductList

* <p>

* 商品表 前端控制器

* </p>

*

* @author elite

* @since 2022-09-06

*/

@RestController

@RequestMapping("/springcloud/product")

public class ProductController {

   @Autowired

   IProductService productService;

   /**

    * 获取商品列表

    * @return

    */

   @GetMapping("/getProductList")

   public List<Product> getProductList(){

       return productService.list();

   }

   /**

    * 获取商品

    * @param product_id

    * @return

    */

   @GetMapping("/getProductById/{product_id}")

   public Product getProductById(@PathVariable("product_id")Integer product_id){

       return productService.getById(product_id);

   }

}

库存模块

 

/**

* <p>

* 库存表 前端控制器

* </p>

*

* @author elite

* @since 2022-09-06

*/

@RestController

@RequestMapping("/springcloud/stock")

public class StockController {

   @Autowired

   IStockService stockService;

   /**

    * 获取库存列表

    * @return

    */

   @GetMapping("/getStockList")

   public List<Stock> getStockList(){

       return stockService.list();

   }

   /**

    * 获取库存ID

    * @param stock_id

    * @return

    */

   @GetMapping("/getStockById/{stock_id}")

   public Stock getStockById(@PathVariable("stock_id")Integer stock_id){

       return stockService.getById(stock_id);

   }

}

订单模块

订单模块,获取订单信息,获取对应的用户信息与商品信息。以resttemplate调用用户模块服务以及商品服务模块。

/**

* <p>

* 订单表 前端控制器

* </p>

*

* @author elite

* @since 2022-09-06

*/

@RestController

@RequestMapping("/springcloud/order")

public class OrderController {

   @Autowired

   IOrderService orderService;

   @Autowired

   RestTemplate restTemplate;

   /**

    * 获取订单列表

    * @return

    */

   @GetMapping("/getOrderList")

   public List<Order> getOrderList(){

       return orderService.list();

   }

   /**

    * 获取订单列表

    * @return

    */

   @GetMapping("/getOrderById/{order_id}")

   public HashMap<String,Object> getOrderById(@PathVariable("order_id")Integer order_id){

       HashMap<String,Object> res = new HashMap<>();

       //获取订单

       Order order = orderService.getById(order_id);

       res.put("order",order);

       //获取用户

       User user = restTemplate.getForObject("http://localhost:8081/springcloud/user/getUserByUseId/"+order.getUserId(), User.class);

       res.put("user",user);

       //获取商品信息

       Product product = restTemplate.getForObject("http://localhost:8082/springcloud/product/getProductById/"+order.getProductId(), Product.class);

       res.put("product",product);

       return res;

   }

}

测试

完整的订单信息,包括订单信息,用户信息,商品信息。

dd9a6750b27344848545163bb553249d.png

相关文章
|
27天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
51 2
|
14天前
|
Cloud Native 持续交付 云计算
云原生入门指南:从容器到微服务
【10月更文挑战第28天】在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本篇文章将带你了解云原生的基本概念,探索它如何通过容器化、微服务架构以及持续集成和持续部署(CI/CD)的实践来提升应用的可伸缩性、灵活性和可靠性。你将学习到如何利用这些技术构建和部署在云端高效运行的应用,并理解它们对DevOps文化的贡献。
37 2
|
17天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
51 3
|
30天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
27天前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
71 1
|
30天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
15天前
|
监控 API 持续交付
后端开发中的微服务架构:从入门到精通
【10月更文挑战第26天】 在当今的软件开发领域,微服务架构已经成为了众多企业和开发者的首选。本文将深入探讨微服务架构的核心概念、优势以及实施过程中可能遇到的挑战。我们将从基础开始,逐步深入了解如何构建、部署和管理微服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的建议。
34 0
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
122 1
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
125 1
Springcloud Alibaba + jdk17+nacos 项目实践