大叫好我是小帅,今天我们来讲微服务开发工程细节,这里不包括全部代码,包括父子工程pom文件讲解,RestTemplate发送http请求。
文章目录
- 1. 项目工程介绍
- 1.1 父工程的pom文件
- 1.2 Spring Cloud版本和springBoot关系
- 1.3 创建两个子项目
- 2. RestTemplate
- 2.1 RestTemplate的简单使用
1. 项目工程介绍
这里我提供了项目全部代码:https://gitee.com/eating-candy-is-also-buni/spring-cloud/commit/9f8d1f3a6b655876062f052dab16b0a7c9e1aee2
项目结构:
1.1 父工程的pom文件
⽤properties来进⾏版本号的统⼀管理, 使⽤dependencyManagement来管理依赖, 声明⽗⼯程的打包⽅式为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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cdm</groupId><artifactId>clout</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging> <!-- 声明⽗⼯程的打包⽅式为pom--><modules><module>product-service</module><module>order-service</module></modules><!-- 新添加--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.6</version><relativePath/> <!-- lookup parent from repository --></parent><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><java.version>17</java.version><mybatis.version>3.0.3</mybatis.version><mysql.version>8.0.33</mysql.version><spring-cloud.version>2022.0.3</spring-cloud.version></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><!-- 只是声明,没有引用,子项目应用才下载--><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>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>${mybatis.version}</version><scope>test</scope></dependency></dependencies></dependencyManagement>
</project>
解释:
DependencyManagement 和 Dependencies
- dependencies :将所依赖的jar直接加到项⽬中. ⼦项⽬也会继承该依赖.
- dependencyManagement :只是声明依赖, 并不实现Jar包引⼊,
如果⼦项⽬需要⽤到相关依赖,需要显式声明
. 如果⼦项⽬没有指定具体版本, 会从⽗项⽬中读取version. 如果⼦项⽬中指定了版本号,就会使⽤⼦项⽬中指定的jar版本. **此外⽗⼯程的打包⽅式应该是pom,**不是jar, 这⾥需要⼿动使⽤ packaging 来声明.
子工程pom文件怎么显示声明等等我会讲
1.2 Spring Cloud版本和springBoot关系
Spring Cloud 是基于SpringBoot搭建的, 所以Spring Cloud 版本与SpringBoot版本有关
1.3 创建两个子项目
声明项⽬依赖 和 项⽬构建插件
<!-- 新添加--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource></resources></build>
解释:
⼦项⽬没有指定具体版本, 会从⽗项⽬中读取version. 如果⼦项⽬中指定了版本号,就会使⽤⼦项⽬中指定的jar版本.
2. RestTemplate
RestTemplate 是从 Spring3.0 开始⽀持的⼀个 HTTP 请求⼯具, 它是⼀个同步的 REST API 客⼾端, 提供了常⻅的REST请求⽅案的模版.
2.1 RestTemplate的简单使用
实现思路: order-service服务向product-service服务发送⼀个http请求, 把得到的返回结果, 和订单结果融合在⼀起, 返回给调⽤⽅.
实现⽅式: 采⽤Spring 提供的RestTemplate
实现http请求的⽅式, 有很多, 可参考: https://zhuanlan.zhihu.com/p/670101467
- 定义RestTemplate
@Configuration
public class BeanConfig {//把这个第三方类交给Spring管理@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
修改order-service中的 OrderService
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectByOrderId(Integer orderId) {OrderInfo orderInfo = orderMapper.selectByOrderId(orderId);String url = "http://127.0.0.1:9090/product/" + orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}
测试
访问url: http://127.0.0.1:8080/order/1
好了今天就到这里了,感谢观看。