发布于2021-05-29 20:21 阅读(1385) 评论(0) 点赞(25) 收藏(3)
我们本次是使用的电商项目中的商品、订单为案例进行讲解。
maven : 3.5.0
数据库:Mysql5.6以上
持久层:Mybatis-plus(MyBatis)
其他:SpringCloud Alibaba
springcloud-alibaba 父工程 《jar版本的管理》
shop-common 公共模块【实体类】 《实体类,公共依赖,工具类。》
shop-product 商品微服务 【端口: 8080~8089】
shop-order 订单微服务 【端口: 8090~8099】
-- ----------------------------
-- Table structure for shop_order
-- ----------------------------
DROP TABLE IF EXISTS `shop_order`;
CREATE TABLE `shop_order` (
`oid` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NULL DEFAULT NULL,
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`pid` int(11) NULL DEFAULT NULL,
`pname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`pprice` decimal(10, 0) NULL DEFAULT NULL,
`number` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`oid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7152 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Table structure for shop_product
-- ----------------------------
DROP TABLE IF EXISTS `shop_product`;
CREATE TABLE `shop_product` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`pname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`pprice` decimal(10, 0) NULL DEFAULT NULL,
`stock` int(11) NULL DEFAULT NULL,
PRIMARY KEY (`pid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- Records of shop_product
-- ----------------------------
INSERT INTO `shop_product` VALUES (1, '华为', 3900, 6000);
INSERT INTO `shop_product` VALUES (2, 'vivo', 2999, 60000);
INSERT INTO `shop_product` VALUES (3, '小米', 6000, 6000);
SET FOREIGN_KEY_CHECKS = 1;
在微服务框架中,最常见的场景就是微服务之间的相互调用。我们以电商系统最常见的用户下单功能为例子来演示微服务的调用:客户端向订单微服务发送一个下单的请求,在进行保存订单之前需要调用商品微服务来查询商品的信息。
我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者。
在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。
我们以本地项目进行演示。我们创建一个父项目、一个公共项目和两个微服务
创建一个maven工程,然后在pom.xml文件中添加下面内容
<!-- 引入父依赖-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.3.RELEASE</version>
</parent>
<!-- 定义版本号-->
<properties>
<!-- jdk版本-->
<java.version>1.8</java.version>
<!-- 数据库连接编码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 响应编码-->
<project.reporing.outputEncoding>UTF-8</project.reporing.outputEncoding>
<!-- springcloud的版本-->
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<!-- springcloud alibaba版本-->
<spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
</properties>
<!--dependencyManagement:负责jar的管理,不负责jar的下载。-->
<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>
<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>
里面定义的版本号版本对应图如下
1.一定要在当前项目下创建,如下:
shop-common工程在CSDN工程下边
2.在shop-common的pom.xml中添加依赖在此公共工程里面定义的都是所有
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
</dependencies>
3.在shop-common中创建公共的实体类 Order 、 Prodcut
Order类:
@Data
@TableName("shop_order")
public class Order {
@TableId(type = IdType.AUTO)
private Integer oid;
private Integer uid;
private String username;
private Integer pid;
private String pname;
private Double pprice;
private Integer number;
}
product类:
@Data
@TableName("shop_product")
public class Product {
@TableId(type = IdType.AUTO)
private Integer pid;
private String pname;
private Double pprice;
private Integer stock;
}
这两个类要建好,与数据库对应。
1.在shop-product的pom.xml中配置:
<dependencies>
<!-- 继承shop-common工程的配置-->
<dependency>
<groupId>org.example</groupId>
<artifactId>shop-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 集成web服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 连接数据库jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2.手动在resources文件夹下创建application.properties并编写配置文件:
# 为该微服务设置端口号
server.port=8081
# 数据源的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springcloud?serverTimezone=Asia/Shanghai&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# dao生产sql日志
logging.level.com.aaa.dao=debug
3.创建主启动类:
@SpringBootApplication
@MapperScan("com.aaa.dao")
public class AppProduct {
public static void main(String[] args) {
SpringApplication.run(AppProduct.class,args);
}
}
4.创建dao接口继承BaseMapper(<泛型一定要加上>,这样就能用Mybaits-plus封装好的方法了):
public interface ProductDao extends BaseMapper<Product> {
}
5.编写业务代码:
我这边偷个懒,都写在controller内了,大家不要仿照我。
@RestController
@CrossOrigin
@RequestMapping("/product")
public class ProductController {
@Resource
private ProductDao dao;
@GetMapping("/findByIdProduct/{pid}")
public Product findByIdProduct(@PathVariable("pid") Integer pid ){
return dao.selectById(pid);
}
}
1.创建工程shop-order,和shop-product创建一样,都在CSDN工程下
2.pom.xml配置:
<dependencies>
<!-- 继承shop-common工程的配置-->
<dependency>
<groupId>org.example</groupId>
<artifactId>shop-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 集成web服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 连接数据库jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
3.手动在resources文件夹下创建application.properties并编写配置文件:
server.port=8091
# 数据源的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springcloud?serverTimezone=Asia/Shanghai&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# dao生产sql日志
logging.level.com.aaa.dao=debug
4.创建主启动类:
@SpringBootApplication
@MapperScan("com.aaa.dao")
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class,args);
}
}
5.创建dao接口继承BaseMapper(<泛型一定要加上>,这样就能用Mybaits-plus封装好的方法了):
public interface OrderDao extends BaseMapper<Order> {
}
6.编写业务代码:
@RestController
@CrossOrigin
@RequestMapping("/order")
public class OrderController_openfeign {
@Resource
private OrderDao dao;
//RestTemplate对象可以帮我们获取微服务对象
@Autowired
private RestTemplate restTemplate;
@Autowired
private ProductFeign productFeign;
@GetMapping("payOrder")
public String payOrder(Integer pid , Integer num){
Order order = new Order();
order.setUid(1);
order.setNumber(num);
order.setUsername("沈金坡");
order.setPid(pid);
//通过restTemplate.getForObject方法传入微服务请求路径,可以远程调用方法。
Product product = restTemplate.getForObject("http://localhost:8081/product/" + pid, Product.class);
if (product!=null){
order.setPname(product.getPname());
order.setPprice(product.getPprice());
}else {
throw new RuntimeException("您购买的商品已下架");
}
int i = dao.insert(order);
if(i>0){
return "下单成功";
}
return "失败";
}
}
原文链接:https://blog.csdn.net/weixin_56320090/article/details/117323546
作者:helloworld
链接:http://www.javaheidong.com/blog/article/207286/c575dd38ef83b885190e/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!