父工程构建
创建父工程
创建Maven工程
设置编码
设置注解激活生效
设置编译版本
过滤FileTpye设置,在目录中隐藏文件
这样目录看着就很舒服
父工程POM文件
- 父工程只是做依赖管理
所以packing方式为pom,并且不需要编写代码,将src文件夹删除
- 统一管理jar包版本
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
添加依赖
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
dependencyManagement和dependencies
- Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。
- 使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用这个dependencyManagement 元素中指定的版本号。
- dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖(子项目通过
<dependence>
引入)。 - 如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
- 跳过单元测试
- 至此,父项目就搭建完成了。通过Maven的clean、install就可以生成包给子项目引入
微服务工程构建
- 总体模块
80端口作为客户端模块
8001端口作为微服务提供者模块
微服务提供者模块
步骤
- 建Module
- 修改pom文件
- 编写配置文件
- 编写模块主程序
- 编写业务类
- 建Module
建立Maven项目即可,注意JDK版本的选择
选择父工程以及模块名
此时的结构
同时,父工程的pom文件自动新增了module
- 修改pom文件
同时可以看到引入的依赖中,有的版本号没有写,是因为使用的父工程中的版本号。
父工程中没有的模块,子工程还是需要些的
<!--引入的依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 编写配置文件
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://101.35.238.236:3306/springcloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
username:
password:
mybatis:
mapper-locations: classpath:mapper/*.xml # 扫描Mapper的路径为类路径下mapper文件夹下的所有.xml文件
type-aliases-package: top.chasingwind.springcloud.entities # Entity所在包
- 编写模块主程序
编写业务类
- 创建表
``mysql CREATE TABLE
payment` (
id
bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘ID’,serial
varchar(200) DEFAULT ‘’,PRIMARY KEY (
id
)- 创建表
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
2.
创建实体类
> ![](https://blog.chasingwind.top/9H9egb.png#alt=)
> ![](https://blog.chasingwind.top/tK5Xel.png#alt=)
> 定义通用返回实体类
> ![](https://blog.chasingwind.top/VqXLtF.png#alt=)
3.
创建Dao接口
> ![](https://blog.chasingwind.top/fuJB5z.png#alt=fuJB5z)
4.
创建Dao映射文件xml文件
> 注意需要和配置文件中的路径对应
> ![](https://blog.chasingwind.top/syGddS.png#alt=)
5.
Service层
> ![](https://blog.chasingwind.top/8dmFag.png#alt=)
6.
Controller层
> ![](https://blog.chasingwind.top/MagdNB.png#alt=)
7.
启动测试
> 直接运行模块的SpringBoot启动类启动
> create
> ![](https://blog.chasingwind.top/1VfLYH.png#alt=)
> getById
> ![](https://blog.chasingwind.top/lY3vRg.png#alt=)
<a name="7c759483"></a>
### 客户端消费者模块
-
客户端只需要调用服务端的功能即可,所以只需要实现Controller
-
建立Module
> ![](https://blog.chasingwind.top/bDZJtX.png#alt=)
-
修改pom文件
```xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- 编写配置文件
可以通过HTTP地址(即常说的“网址”)加“: 80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“: 80”了。
- 编写模块主程序
编写业务类
- 实体类
- 实体类
Controller层实现调用微服务模块—RestTemplate
客户端要调用微服务提供者,由于是两个模块。客户端并不能直接通过注入Bean的方式调用到微服务提供者。
借助RestTemplate调用远程Http服务
RestTemplate提供了多种便捷访问远程Http服务的方法, 是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
使用配置类将RestTemplate注入到IOC容器中
- 实现Controller层
- 测试
工程重构
- 上面的模块存在的问题
entities中的实体类在两个模块中都存在,并且是一模一样的,这样会导致冗余
将各个模块中重复的部分提取出来,作为一个新的模块被其他模块引用
- 创建新模块
- 创建新模块
- 修改pom文件
中间还可以引入各个模块通用的依赖,比如hutool工具包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
由于此模块是被其他模块进行引用,所以不需要配置文件和主程序类
将各个模块重复的部分放到此模块中
Maven clean install确保可以正常打包
微服务提供者和客户端进行引入
在各自模块中引入公共模块,然后删除各自模块中的entities包
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>top.chasingwind</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
- 测试
正常使用