目录

一、微服务提供消费者订单模块

1.新建模块cloud-consumer-order80

2.pom文件

3.实体类(CommonResult &Payment)

4.控制层

⚪RestTemplate

⚪创建配置类

5.application.yml

6.主启动类 OrderMain80

7.测试

⭐验证插入

使用@RequestBody注解

二、工程重构(实现一处修改处处使用!)

1.新建项目cloud-api-commons

2.修改pom

3.将 entities 包里面的实体类放到这个子模块中

4.执行maven的clean和install

5.将 提供者 和 消费者 两个项目中的 entities 包删除,并删除掉加入到 cloud-api-commons 模块的 依赖配置。


一、微服务提供消费者订单模块

1.新建模块cloud-consumer-order80

消费者现在只模拟调用提供者的Controller方法,没有持久层配置,只有Controller和实体类

当然也要配置主启动类和启动端口

2.pom文件

cloud2022com.atxupt.springcloud1.0-SNAPSHOT4.0.0cloud-consumer-order8088org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.apache.maven.pluginsmaven-project-info-reports-plugin3.4.0org.springframework.bootspring-boot-dependencies2.2.2.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesHoxton.SR1pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies2.2.8.RELEASEpomimportmysqlmysql-connector-java${mysql.version}runtimecom.alibabadruid1.1.10org.mybatis.spring.bootmybatis-spring-boot-starter2.2.0com.alibabadruid-spring-boot-starter1.2.1junitjunit${junit.version}log4jlog4j${log4j.version}org.projectlomboklombokorg.springframework.cloudspring-cloud-config-serverorg.springframework.bootspring-boot-starter-jdbcmysqlmysql-connector-java8.0.16

3.实体类(CommonResult &Payment)

@Data@AllArgsConstructor@NoArgsConstructorpublic class CommonResult {//404 not_foundprivate Integer code;//404private Stringmessage;//not foundprivate T data;public CommonResult(Integer code,String message){this(code,message,null);}}
@Data@AllArgsConstructor//全参@NoArgsConstructor //空参public class Payment {private long id;//long:数据库中id的数据类型为bigintprivate String serial;}

4.控制层

@RestController@Slf4jpublic class OrderController {public static final String PAYMENT_URL = "http://localhost:8001";@Resourceprivate RestTemplate restTemplate;@GetMapping("/consumer/payment/create")public CommonResult create(Payment payment){return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);}@GetMapping("/consumer/payment/get/{id}")public CommonResult getPayment(@PathVariable("id") Long id){return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);}}

⚪RestTemplate

  • spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。
  • RestTemplate提供了多种便捷访问远程HTTP服务的方法
  • 相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

⚪创建配置类

@Configurationpublic class ApplicationContextConfig { @Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();}}

5.application.yml

server:port: 80spring:application:name: cloud-payment-servicedatasource:driver-class-name: com.mysql.cj.jdbc.Driver#数据库urlurl: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=false# 数据库访问账户username: root# 数据库访问密码password: 123456

6.主启动类 OrderMain80

@SpringBootApplicationpublic class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class,args);}}

7.测试

同时启动两个项目

(不需要加端口号就可以进行访问)

⭐验证插入

显示插入成功,但是在数据库中查看会发现内容为null

使用@RequestBody注解

再次插入数据

成功插入!

在浏览器中也可以成功查询

二、工程重构(实现一处修改处处使用!)

将相同的部分进行提取

1.新建项目cloud-api-commons

2.修改pom

需要引入的依赖

org.springframework.bootspring-boot-devtoolsorg.projectlomboklomboktruecn.hutoolhutool-all5.8.0

3.将 entities 包里面的实体类放到这个子模块中

4.执行maven的clean和install

5.将 提供者 和 消费者 两个项目中的 entities 包删除,并删除掉加入到 cloud-api-commons 模块的 依赖配置。

6.将 打包到 maven 仓库的 cloud-api-commons 模块,引入到8001和80的 pom 文件中,

com.atxupt.springcloudcloud-api-commons1.0-SNAPSHOT