微服务开发环境准备
项目搭建
父项目创建
-
创建父项目
-
确认IDEA设置
- Maven设置
-
父项目 pom文件
-
设置跳过单元测试
商品服务和订单服务创建
通过Spring Initializr的方式创建项目
Spring Initializr SpringBoot项目工程脚手架,可以直接创建出来SpringBoot项目,包含application配置文件和启动类等。https://start.spring.io/类似的脚手架还要Alibaba的Java工程构建工具:https://start.aliyun.com/bootstrap.html
IDEA 整合 Alibaba Java工程脚手架 https://start.aliyun.com/article/initializr/springbootideaplugin
商品服务创建
-
选择通过Spring Initializr的方式创建项目
-
指定使用Alibaba Java工程脚手架的地址https://start.aliyun.com/
-
选择依赖创建项目
-
修改pom文件,继承父项目
-
修改商品服务的pom文件,如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>cloud-product</artifactId> <version>0.0.1-SNAPSHOT</version> <name>cloud-product</name> <description>商品服务</description> <parent> <groupId>com.baizhi</groupId> <artifactId>cloud-demo</artifactId> <version>1.0-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
-
修改父项目pom文件
-
-
在商品服务中创建测试Controller接口
-
编写application配置文件启动项目
订单服务创建
-
选择通过Spring Initializr的方式创建项目
-
指定使用Alibaba Java工程脚手架的地址
-
选择依赖创建项目
-
修改pom文件,继承父项目
-
在订单服务中创建测试Controller接口
RestTemplate
订单服务如何获取商品服务数据
服务调用:订单服务发请求,请求商品服务,获取响应数据
Java代码怎么发http请求?
- HTTPClient Apache
- RestTemplate Spring
参考资料:https://mp.weixin.qq.com/s/3MfNWtTfckGr2hG9Ly9OPg
RestTemplate简介和基本使用
Spring中封装的通过Java代码发送RestFul请求(HTTP)的模板类,内置发送get post delete等请求的方法,在SpringBoot中只要导入spring-boot-starter-web的依赖可以直接使用。
导入依赖 spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置RestTemplate
在测试类中使用RestTemplate的APi发送请求
package com.baizhi.cloudorder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class CloudOrderApplicationTests {
@Autowired
private RestTemplate restTemplate;
private String url = "http://localhost:8081/product/getProductById?id=1";
/**
* 发送请求 请求商品服务
*
* 商品服务接口地址:http://localhost:8081/product/getProductById
*/
@Test
void contextLoads() {
/**
* getForObject getForEntity
* 参数1 url
* 参数2 响应数据的类型的类对象
* 参数3 url参数【可以不要 参数可以直接?拼接】
*
* getForObject 返回值是被调用接口的响应数据
* getForEntity 返回值是响应体对象,包含更多的数据:接口响应数据,响应状态码等
*/
String result = restTemplate.getForObject(url, String.class);
System.out.println(result);
ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
System.out.println(entity.getStatusCode());
System.out.println(entity.getBody());
}
@Test
void test1() {
// 通过map封装参数
Map map = new HashMap();
map.put("id",1);
String result = restTemplate.getForObject(
"http://localhost:8081/product/getProductById?id={id}",
String.class,
map
);
System.out.println(result);
}
}