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

相关文章
|
25天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
134 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
9天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
55 16
|
26天前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
12天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
13天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
174 7
|
28天前
|
Java 关系型数据库 Nacos
微服务SpringCloud链路追踪之Micrometer+Zipkin
SpringCloud+Openfeign远程调用,并用Mircrometer+Zipkin进行链路追踪
215 20
|
17天前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
40 1
|
4月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
2天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
|
26天前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇