3. maven子工程microservice-common模块搭建
接下来我们搭建 maven 子工程中的公共模块 microservice-common
,新建子模块,我们要选择 module,步骤为: File -> New -> Module,然后选择 maven,这和上面建立父工程一模一样,下一步的时候需要注意。
这里要注意的是,使用 IDEA 创建子模块的时候,不需要选择 “Add as module to” 这一项,默认是选择了我们刚刚创建的父工程microservice
,我们在 Parent 项选择刚刚创建的microservice
模块即可,然后给该子模块起名为microservice-common
。创建好之后,我们来看一下该模块的 pom.xml 文件。
<?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"> <parent> <artifactId>microservice</artifactId> <groupId>com.itcodai</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../microservice/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-common</artifactId> </project>
可以看到,在microservice-common
模块中,有个 <parent> 标签,里面内容是父工程 microservice 的相关信息,包括依赖的路径也标出来了,这样microservice-common
模块和microservice
模块就建立了关联。子模块的 <packaging> 类型我们定义成 jar 即可。
<packaging>jar</packaging>
在microservice-common
模块我们主要定义一些公共的组件,本节课中,我们先定义一个订单实体类,因为这个实体在其他模块也要用到,所以我们定义在这个公共模块中,那么在该模块中,目前我们只需要引入 lombok 即可。如下。
<?xml version="1.0" encoding="UTF-8"?> <project ...> <!-- 省略其他内容 --> <!-- 当前Module需要用到的依赖,按自己需求添加,版本号在父类已经定义了,这里不需要再次定义 --> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> </project>
lombok 依赖主要是用在实体类上,我们不用自己去定义构造方法,不用自己去生成 get 和 set 方法了,很方便。引入了依赖之后,我们去创建一个订单实体类。
@AllArgsConstructor @NoArgsConstructor @Data public class TOrder { private Long id; // 主键id private String name; // 商品名称 private Double price; // 商品价格 private String dbSource; // 所存的数据库 }
解释一下该实体类上的几个注解。
* @AllArgsConstructor 注解:表示生成带有所有属性的构造方法。
* @NoArgsConstructor 注解:表示生成不带参数的构方法。
* @Data 注解:表示生成get和set方法
可以看出,使用 lombok 很方便,省去了很多繁琐的代码。到此为止,microservice-common
模块基本上就写完了,在实际项目中,可能还有别的实体类或者工具类等需要定义,视具体情况而定。
接下来我们需要把这个模块打包,让其他模块引用,这样其他模块就可以使用该模块中的公共组件了,就跟普通的 maven 依赖一样。如何打包呢?点开右边的 Maven Projects,我们可以看到目前项目中有两个模块,一个父工程和一个公共子工程模块,然后打开公共模块,执行 maven 中的 clean 和 install 命令即可。如下。
在下一部分,我们创建订单服务提供模块,在订单服务提供模块中,我们引入该公共模块。
4. maven子工程microservice-order-provider模块搭建
接下来我们搭建 maven 子工程中的订单服务提供模块microservice-order-provider
。新建子模块的方法和上面microservice-common
模块一模一样,在命名的时候命名为microservice-order-provider
即可。完成之后,来看一下该模块中的 pom 文件。
<?xml version="1.0" encoding="UTF-8"?> <project ...> <parent> <artifactId>microservice</artifactId> <groupId>com.itcodai</groupId> <version>1.0-SNAPSHOT</version> <relativePath>../microservice/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>microservice-order-provider</artifactId> <packaging>jar</packaging> <!-- 当前Module需要用到的依赖,按自己需求添加,版本号在父类已经定义了,这里不需要再次定义 --> <dependencies> <!-- 引入自己定义的 microservice-common 通用包,可以使用common模块中的TOrder类 --> <dependency> <groupId>com.itcodai</groupId> <artifactId>microservice-common</artifactId> <version>${project.version}</version> </dependency> <!-- spring boot web 依赖 --> <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> </dependency> <!-- mybatis 依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- mysql 依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
可以看出,引入上一节我们自定义的microservice-common
模块和引入其他依赖没什么两样,版本我们使用 ${project.version} 来跟着项目版本走即可。其他依赖我们只需要引入即可,不需要定义版本号。
由于这是服务提供模块,我们需要在表中查询出订单信息,然后将信息通过接口提供给调用方,所以在该模块中,我们需要整合一下 mybatis,这里主要使用注解的方式,mybatis 的相关配置和代码可以在本文源码中查看。我们看一下 application.yml 配置文件中的部分信息。
# 服务端口号 server: port: 8001 spring: application: name: microservice-order # 对外暴露的服务名称
spring.application.name 是用来定义服务的名称,在后面的课程会详细的说明。TOrder实体对应的表以及数据见 order.sql 脚本文件。我们看一下该表中的数据。
在 OrderMapper 中写两个方法来查询表中信息。
public interface OrderMapper { @Select("select * from t_order where id = #{id}") TOrder findById(Long id); @Select("select * from t_order") List<TOrder> findAll(); }
我们在 Controller 层写两个接口来测试一下。
@RestController @RequestMapping("/provider/order") public class OrderProviderController { @Resource private OrderService orderService; @GetMapping("/get/{id}") public TOrder getOrder(@PathVariable Long id) { return orderService.findById(id); } @GetMapping("/get/list") public List<TOrder> getAll() { return orderService.findAll(); } }
在浏览器中输入localhost:8001/provider/order/get/list,如果能查出来两条记录,并以 json 格式输出到浏览器,如下,说明服务提供模块功能正常。
[{"id":1,"name":"跟武哥一起学 Spring Boot","price":39.99,"dbSource":"microservice01"},{"id":2,"name":"跟武哥一起学 Spring cloud","price":39.99,"dbSource":"microservice01"}]