目录
1.技术选型
2.模块设置
3.微服务调用
4.创建父工程(springcloud-alibaba )
版本对应:编辑
5.创建基础模块
1.创建shop-common模块,
1.在pom.xml中添加依赖
2.创建实体类
2.创建商品微服务 shop-product
1.添加依赖
2.创建配置文件application.yml
3.创建ProductDao接口
4.创建ProductService接口
5.创建ProductServiceImpl实现类
6.创建ProductController类
7.创建启动类
3.创建订单微服务 shop-order
1.添加依赖
2.创建配置文件application.yml
3.创建OrderDao接口
4.创建OrderService接口
5.创建OrderServiceImpl实现类
6.创建OrderController类
7.创建启动类
1.技术选型
maven:3.5.0+
数据库:MySQL 5.7以上
持久层: Mybatis-plus《Mybatis Mapper Mybatis-plus》
其他: SpringCloud Alibaba 技术栈 druid
2.模块设置
springcloud-alibaba 父工程 ----jar的版本管理 公共jar的引入
shop-common 公共模块【实体类】 《实体类,公共依赖,工具类。》
shop-product 商品微服务 【端口: 8080~8089 】
shop-order 订单微服务 【端口: 8090~8099 】
3.微服务调用
在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单为
例来演示微服务的调用:客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微服务查询商品的信息。
我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者。
在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。
4.创建父工程(springcloud-alibaba )
可以创建springboot工程,也可以使用maven工程,但spring工程里一些东西使用不到,这里使用的是springboot工程创建的父工程。然后在pom.xml文件中添加下面内容
<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><!--版本不要选择太高的版本--><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.lzl</groupId><artifactId>springcloud-alibaba</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>1.8</java.version><!--定义版本号--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF- 8</project.reporting.outputEncoding><spring-cloud.version>Hoxton.SR8</spring-cloud.version><spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version></properties><!--dependencyManagement:它只负责jar的版本号管理,不负责jar的下载,交于子模块,子模块在使用时无需指定版本号:springboot springcloud springcloudalibaba之间版本一定要匹配--><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!--springcloudalibaba的版本管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
版本对应:
5.创建基础模块
1.创建shop-common模块,
1.在pom.xml中添加依赖
maven工程
<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>
2.创建实体类
package entity;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;@Data@TableName(value="shop_product")public class Product {@TableId(type= IdType.AUTO)private Integer pid;private String pname;//商品名称private Double pprice;//商品价格private Integer stock;//库存}
package entity;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;@Data@TableName("shop_order")public class Order {@TableId(type = IdType.AUTO)private Long oid; //订单idprivate Integer uid;//用户idprivate String username;//用户名private Integer pid;//商品idprivate String pname;//商品名称private Double pprice;//商品价格private Integer number;//购买数量}
2.创建商品微服务 shop-product
1.添加依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.lzl</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-product</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!--引入公共模块--><dependency><groupId>com.lzl</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
2.创建配置文件application.yml
#为了后期拓展方便商品微服务的端口设置为8080-8089之间server.port=8081#数据源spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springclooud?serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=lzl200038#sql日志mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.创建ProductDao接口
package com.lzl.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.lzl.entity.Product;import org.apache.ibatis.annotations.Mapper;/*** @create -08-18*/@Mapperpublic interface ProductMapper extends BaseMapper<Product> {}
4.创建ProductService接口
package com.lzl.service;import com.lzl.entity.Product;/*** @create -08-18*/public interface ProductService {public Product findById(Integer pid);}
5.创建ProductServiceImpl实现类
package com.lzl.service.impl;import com.lzl.dao.ProductMapper;import com.lzl.entity.Product;import com.lzl.service.ProductService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/*** @create -08-18*/@Servicepublic class ProductServiceImpl implements ProductService {@Autowiredprivate ProductMapper productMapper;@Overridepublic Product findById(Integer pid) {return productMapper.selectById(pid);}}
6.创建ProductController类
package com.lzl.controller;import com.lzl.entity.Product;import com.lzl.service.ProductService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/*** @create -08-19*/@RestController@RequestMapping("product")public class ProductController {@Autowiredprivate ProductService productService;@GetMapping("getById/{pid}")public Product getById(@PathVariable Integer pid){return productService.findById(pid);}}
7.创建启动类
package com.lzl;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ShopProductApplication {public static void main(String[] args) {SpringApplication.run(ShopProductApplication.class, args);}}
3.创建订单微服务 shop-order
1.添加依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-alibaba</artifactId><groupId>com.lzl</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springcloud-order</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><dependency><groupId>com.lzl</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>
2.创建配置文件application.yml
#为了后期拓展方便订单微服务的端口设置为8090-8099之间server.port=8091#数据源spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/springclooud?serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=lzl200038mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3.创建OrderDao接口
package com.lzl.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.lzl.entity.Order;import org.apache.ibatis.annotations.Mapper;/*** @create -08-18*/@Mapperpublic interface OrderMapper extends BaseMapper<Order> {}
4.创建OrderService接口
package com.lzl.service;import com.lzl.entity.Order;/*** @create -08-18*/public interface OrderService {public int save(Order order);}
5.创建OrderServiceImpl实现类
package com.lzl.service.impl;import com.lzl.dao.OrderMapper;import com.lzl.entity.Order;import com.lzl.service.OrderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;/*** @create -08-18*/@Servicepublic class OrderServiceImpl implements OrderService {@Autowiredprivate OrderMapper orderMapper;@Overridepublic int save(Order order) {return orderMapper.insert(order);}}
6.创建OrderController类
package com.lzl.controller;import com.lzl.entity.Order;import com.lzl.entity.Product;import com.lzl.service.OrderService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;/*** @create -08-19*/@RestController@RequestMapping("order")public class OrderController {@Autowiredprivate OrderService orderService;//该类默认没有交于spring管理 在启动类上添加 一个 交于spring管理//@Bean// public RestTemplate restTemplate(){// return new RestTemplate();// }@Autowiredprivate RestTemplate restTemplate;@GetMapping("buy/{pid}/{num}")public String buy(@PathVariable Integer pid,@PathVariable Integer num){System.out.println("购买开始===================================");Order order = new Order();order.setUid(1);order.setUsername("张三");order.setNumber(num);order.setPid(pid);//需要设置订单对象中商品的信息// 商品操作都在商品微服务---订单微服务远程调用商品微服务即可拿到商品信息。远程调用:http协议的restFul风格调用适合微服务, 基于TCP协议的RPC调用适合SOA分布式//一定采用的为http协议: (1)自己写代码完成http调用【httpclient】微信支付 ---适合调用第三方网址。 (2)spring提高了一个工具类RestTemplate,该类也是基于http协议完成的调用Product product = restTemplate.getForObject("http://localhost:8081/product/getById/" + pid, Product.class);System.out.println("远程查询商品的结果"+product);order.setPname(product.getPname());order.setPprice(product.getPprice());orderService.save(order);return "下单成功";}}
7.创建启动类
package com.lzl;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;/*** @create -08-19*/@SpringBootApplicationpublic class OrderApp {public static void main(String[] args) {SpringApplication.run(OrderApp.class,args);}@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}