当前位置:   article > 正文

微服务基础环境搭建_搭建微服务

搭建微服务

一.创建父工程

用于聚合其他微服务模块

1 新建 Maven 项目

JDK8+Maven 项目+Web

2 项目设置

  1. 编码的选择 UTF8
  2. JDK 版本的选择

3 删除 src 目录

SpringBoot:模块探究之spring-boot-dependencies-CSDN博客

子模块能够依赖当前父级 pom.xml 配置

【Mybatis】maven配置pom.xml时找不到依赖项(已解决)-CSDN博客

从这往后配置

  1. <!-- 表明是一个父工程,聚合管理其他模块 -->
  2. <packaging>pom</packaging>
  3. <!-- 项目名-->
  4. <name>E-Commerce-Centers Maven Webapp</name>
  5. <!-- 项目描述-->
  6. <description>初始化微服务项目</description>
  7. <!-- 项目url-->
  8. <url>http://maven.apache.org</url>
  9. <!-- 项目开发年份-->
  10. <inceptionYear>2024</inceptionYear>
  11. <!-- 统一配置各个依赖版本 -->
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <!-- 指定JDK版本:8-->
  15. <maven.compiler.source>1.8</maven.compiler.source>
  16. <maven.compiler.target>1.8</maven.compiler.target>
  17. <!-- 开发测试Test-->
  18. <junit.version>4.12</junit.version>
  19. <!-- 日志打印,使用最新的版本的log4j,防止安全漏洞-->
  20. <log4j.version>2.17.2</log4j.version>
  21. <!-- 简化JavaBean:getset、toString-->
  22. <lombok.version>1.18.20</lombok.version>
  23. <!-- 数据库连接mysql:与数据库mysql版本要一致,否则报错-->
  24. <mysql.version>8.0.27</mysql.version>
  25. <!-- 德鲁伊数据库连接池-->
  26. <druid.version>1.1.17</druid.version>
  27. <!-- mybatis数据库操作 -->
  28. <mybatis.spring.boot.version>2.2.0</mybatis.spring.boot.version>
  29. </properties>
  30. <!-- 1. dependencyManagement 作用: 子模块继承后, 锁定版本, 子模块不用再写 version
  31. -->
  32. <dependencyManagement>
  33. <dependencies>
  34. <!-- SpringBoot-->
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-dependencies</artifactId>
  38. <version>2.2.2.RELEASE</version>
  39. <!-- 老师解读:
  40. 1. type: pom 和 scope import 配合使用
  41. 2. 表 示 父 项 目 的 子 模 块 , 在 引 入 springboot 相 关 依 赖 时 锁 定 版 本 为
  42. 2.2.2.RELEASE
  43. 3. 通过 pom + import 解决 maven 单继承机制-别的子项目也可以继承其他项目的依赖
  44. -->
  45. <type>pom</type>
  46. <scope>import</scope>
  47. </dependency>
  48. <!-- SpringCloud-->
  49. <dependency>
  50. <groupId>org.springframework.cloud</groupId>
  51. <artifactId>spring-cloud-dependencies</artifactId>
  52. <!-- SpringCloud与SpringBoot版本要匹配对应-->
  53. <version>Hoxton.SR1</version>
  54. <type>pom</type>
  55. <scope>import</scope>
  56. </dependency>
  57. <!-- SpringCloud Alibaba-->
  58. <dependency>
  59. <groupId>com.alibaba.cloud</groupId>
  60. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  61. <version>2.1.0.RELEASE</version>
  62. <type>pom</type>
  63. <scope>import</scope>
  64. </dependency>
  65. <!--mysql数据库连接-该版本与properties标签内指定的版本一致-->
  66. <dependency>
  67. <groupId>mysql</groupId>
  68. <artifactId>mysql-connector-java</artifactId>
  69. <version>${mysql.version}</version>
  70. </dependency>
  71. <!--druid德鲁伊数据库连接池:版本与properties标签内指定的版本一致-->
  72. <dependency>
  73. <groupId>com.alibaba</groupId>
  74. <artifactId>druid</artifactId>
  75. <version>${druid.version}</version>
  76. </dependency>
  77. <!-- myBatis:增删改查-->
  78. <dependency>
  79. <groupId>org.mybatis.spring.boot</groupId>
  80. <artifactId>mybatis-spring-boot-starter</artifactId>
  81. <version>${mybatis.spring.boot.version}</version>
  82. </dependency>
  83. <!-- 日志记录:log4j-->
  84. <dependency>
  85. <groupId>org.apache.logging.log4j</groupId>
  86. <artifactId>log4j</artifactId>
  87. <version>${log4j.version}</version>
  88. </dependency>
  89. <!-- 测试Test-->
  90. <dependency>
  91. <groupId>junit</groupId>
  92. <artifactId>junit</artifactId>
  93. <version>${junit.version}</version>
  94. </dependency>
  95. <!-- 简化JavaBean-->
  96. <dependency>
  97. <groupId>org.projectlombok</groupId>
  98. <artifactId>lombok</artifactId>
  99. <version>1.18.20</version>
  100. </dependency>
  101. </dependencies>
  102. </dependencyManagement>
  103. <!-- build-暂时先不要,打包:构建项目的名称-->
  104. <!-- <build>-->
  105. <!-- <finalName>E-Commerce-Centers</finalName>-->
  106. <!-- </build>-->

Maven 的 dependencyManagement 说明

二.创建会员中心(service-provider)

微服务模块 service provider

当前模块主要功能:用于简单的 CRUD 增删改查

1 创建 Module 模块

该模块被父项目的 pom.xml 所管理依赖版本

模块名: member-service-provider-10000( 会员-提供服务模块-端口)

微服务模块(提供会员服务)

注意:创建子模块的位置:必须在父项目内部

复制父级项目的绝对路径,创建项目的时候,在该路径下创建子模块

子模块在父模块内,就算成功创建了子模块

查看当前子模块在父级项目内部

待子模块项目生成了项目结构后

如果创建失败,则参考如下博客,删除模块后重新创建

IDEA 如何删除模块和项目_idea移除项目,不是删除-CSDN博客

1-2 Pom.xml 加入相关依赖

修改 子模块 的 pom.xml , 加入相关依赖

子模块在引入依赖的时候,如果父项目也存在该依赖

子项目不指定该依赖版本,则以父项目的依赖版本为准

比如:

父项目:springboot 版本 2.2.0

子模块引入了 springboot 未指定版本,默认版本(父项目) 2.2.0

dependencys 标签中引入如下依赖即可,引入后记得刷新 Maven

  1. <!--SpringBoot版本与父项目一致-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
  6. </dependency>
  7. <!-- 老师解读
  8. 1. starter-actuator 是 springboot 程序的监控系统,
  9. 可以实现健康检查,info 信息等
  10. 2. 访问 http://localhost:10000/actuator 可以看到相关链接, 还可以做相关设置. -->
  11. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
  12. -->
  13. <!-- 指定了监控系统版本-->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-actuator</artifactId>
  17. </dependency>
  18. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web
  19. -->
  20. <!-- mybatis-->
  21. <dependency>
  22. <groupId>org.mybatis.spring.boot</groupId>
  23. <artifactId>mybatis-spring-boot-starter</artifactId>
  24. </dependency>
  25. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  26. <!-- springBoot cloud alibaba-->
  27. <dependency>
  28. <groupId>com.alibaba</groupId>
  29. <artifactId>druid-spring-boot-starter</artifactId>
  30. <!-- 这里我们重新指定一下 version -->
  31. <version>1.1.13</version>
  32. </dependency>
  33. <!-- mysql-->
  34. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  35. <dependency>
  36. <groupId>mysql</groupId>
  37. <artifactId>mysql-connector-java</artifactId>
  38. </dependency>
  39. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc
  40. -->
  41. <!-- jdbc连接池-->
  42. <dependency>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-starter-jdbc</artifactId>
  45. </dependency>
  46. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  47. <dependency>
  48. <!-- lombok-->
  49. <groupId>org.projectlombok</groupId>
  50. <artifactId>lombok</artifactId>
  51. <optional>true</optional>
  52. </dependency>
  53. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
  54. <dependency>
  55. <groupId>org.springframework.boot</groupId>
  56. <artifactId>spring-boot-starter-test</artifactId>
  57. <scope>test</scope>
  58. </dependency>

1-3 创建 resources/application.yml

子模块下,新建application.yml,

注意:数据库的账号密码与数据库的 url 一定要配置正确

  1. server:
  2. port: 10000 #服务端-端口号
  3. spring:
  4. application:
  5. name: member-service-provider #当前模块的项目名称
  6. datasource:
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. # driver-class-name: org.gjt.mm.mysql.Driver
  9. #数据库地址:
  10. #jdbc:mysql://域名:端口/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=false
  11. url: jdbc:mysql://localhost:3306/furns_ssm?useUnicode=true&characterEncoding=utf-8&useSSL=false
  12. username: root #数据库名称
  13. password: abc123 #数据库密码
  14. mybatis:
  15. mapperLocations: classpath:mapper/*.xml #后面 mapper 文件的位置
  16. type-aliases-package: com.wwf.entity #指定POJO扫描包来让mybatis自动扫描到自定义的POJO。

创建项目基本结构

1-4 创建主启动类 MemberApplication

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. //指定注解的扫描路径MVC-@Controller、@Service等等...
  6. @SpringBootApplication(scanBasePackages = {"com.wwf"})
  7. //指定Mapping包扫描路径
  8. @MapperScan(basePackages = {"com.wwf.dao"})
  9. public class MemberApplication {
  10. public static void main(String[] args) {
  11. SpringApplication.run(MemberApplication.class, args);
  12. }
  13. }

1-5 测试 Controller 是否能够正常访问

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. @RestController
  6. public class MemberController {
  7. @RequestMapping("/hi")
  8. public String hi() {
  9. return "hi springboot";
  10. }
  11. }

根据 application.yml 配置的端口访问

http://localhost:10000/hi

2 创建数据库/表

  1. #1.创建数据库
  2. CREATE DATABASE e_commerce_center_db
  3. #2.使用数据库
  4. USE e_commerce_center_db
  5. #3.创建会员表
  6. CREATE TABLE member
  7. (
  8. id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'id', NAME VARCHAR(64) COMMENT '用户名', pwd CHAR(32) COMMENT '密码', mobile VARCHAR(20) COMMENT '手机号码', email VARCHAR(64) COMMENT '邮箱', gender TINYINT COMMENT '性别', PRIMARY KEY (id)
  9. );
  10. #4.插入1条会员信息
  11. INSERT INTO member VALUES
  12. (NULL, 'smith', MD5('123'), '123456789000', 'smith@sohu.com', 1);
  13. #5.查询该会员表
  14. SELECT * FROM member

2-0 新建 JavaBean

  1. @AllArgsConstructor
  2. @NoArgsConstructor
  3. @Data
  4. //Serializable 加上,后面可能使用
  5. public class Member implements Serializable {
  6. private Long id;
  7. private String name;
  8. private String pwd;
  9. private String mobile;
  10. private String email;
  11. private Integer gender;
  12. }

2-1 导入 Result 工具类

  1. /**
  2. * 1. 用于返回结果, 利于 json 格式
  3. * 2. 这个工具类, 在网上也可找到
  4. */
  5. public class Result<T> {
  6. private String code;
  7. private String msg;
  8. private T data;
  9. public String getCode() {
  10. return code;
  11. }
  12. public void setCode(String code) {
  13. this.code = code;
  14. }
  15. public String getMsg() {
  16. return msg;
  17. }
  18. public void setMsg(String msg) {
  19. this.msg = msg;
  20. }
  21. public T getData() {
  22. return data;
  23. }
  24. public void setData(T data) {
  25. this.data = data;
  26. }
  27. public Result() {
  28. }
  29. public Result(T data) {
  30. this.data = data;
  31. }
  32. public static Result success() {
  33. Result result = new Result<>();
  34. result.setCode("200");
  35. result.setMsg("success");
  36. return result;
  37. }
  38. public static <T> Result<T> success(T data) {
  39. Result<T> result = new Result<>(data);
  40. result.setCode("200");
  41. result.setMsg("success");
  42. return result;
  43. }
  44. public static <T> Result<T> success(String msg, T data) {
  45. Result<T> result = new Result<>(data);
  46. result.setCode("200");
  47. result.setMsg(msg);
  48. return result;
  49. }
  50. public static Result error(String code, String msg) {
  51. Result result = new Result();
  52. result.setCode(code);
  53. result.setMsg(msg);
  54. return result;
  55. }
  56. public static <T> Result<T> error(String code, String msg, T data) {
  57. Result<T> result = new Result<>(data);
  58. result.setCode(code);
  59. result.setMsg(msg);
  60. return result;
  61. }
  62. }

2-2 新建 MemberDAO 接口

注意:一定要在启动类中,添加扫描 Mapper 的注解

  1. @Mapper
  2. public interface MemberDao {
  3. // 根据id,查询会员
  4. Member queryMemberById(Long id);
  5. // 添加会员
  6. int save(Member member);
  7. }

2-3 在 /resources/mapper 资源文件下创建 MemberMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--1.先指定Mapper定义的接口的路径-->
  6. <mapper namespace="com.wwf.dao.MemberDao">
  7. <!--insert添加数据SQL语句-->
  8. <!--1. id:方法名
  9. 2. parameterType:方法形参
  10. 3. useGeneratedKeys="true" keyProperty="id": id是否是自增长-->
  11. <insert id="save" parameterType="Member" useGeneratedKeys="true" keyProperty="id">
  12. insert into member(NAME, pwd, mobile, email, gender)
  13. values (#{name}, md5(#{pwd}), #{mobile}, #{email}, #{gender});
  14. </insert>
  15. <!--1. id:结果集映射
  16. 2. type:JavaBean路径-->
  17. <resultMap id="BaseResultMap" type="com.wwf.entity.Member">
  18. <!--column 表的字段
  19. property JavaBean的字段
  20. jdbcType 字段数据类型-->
  21. <id column="id" property="id" jdbcType="BIGINT"></id>
  22. <id column="name" property="name" jdbcType="VARCHAR"></id>
  23. <id column="pwd" property="pwd" jdbcType="VARCHAR"></id>
  24. <id column="mobile" property="mobile" jdbcType="VARCHAR"></id>
  25. <id column="email" property="email" jdbcType="VARCHAR"></id>
  26. <id column="gender" property="gender" jdbcType="TINYINT"></id>
  27. </resultMap>
  28. <!-- 1. id:方法名-->
  29. <!-- 2. parameterType:方法形参-->
  30. <!-- 3. resultMap:其实就是返回值Member-->
  31. <!--将查询的结果:保持到当前结果集中,该结果集是1个PoJo对象(Member)-->
  32. <select id="queryMemberById" parameterType="Long" resultMap="BaseResultMap">
  33. select *
  34. from member
  35. where id = #{id}
  36. </select>
  37. </mapper>

2-4 创建 Service 接口

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. public interface MemberService {
  6. // 查询方法(通过id获取到Member(PoJo/entity))
  7. Member queryMemberById(Long id);
  8. // 插入1条数据
  9. int save(Member member);
  10. }

2-5 创建 ServiceImpl 实现类

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. @Service
  6. public class MemberServiceImpl implements MemberService {// 实现了MemberService接口
  7. @Resource
  8. private MemberDao memberDao;// 从IOC容器中得到该DAO对象-Service层调用DAO层的方法
  9. // 调用DAO对象的查询方法(id)
  10. @Override
  11. public Member queryMemberById(Long id) {
  12. return memberDao.queryMemberById(id);
  13. }
  14. // 调用DAO对象的添加方法
  15. @Override
  16. public int save(Member member) {
  17. return memberDao.save(member);
  18. }
  19. }

2-6 Controller 层

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. @RequestMapping("/member")// 请求路径根目录
  6. @RestController//@Controller+@ResponseBody
  7. @Slf4j// 日志
  8. public class MemberController {
  9. @RequestMapping("/hi")
  10. public String hi() {
  11. return "hi springboot";
  12. }
  13. // Controller调用Service层方法
  14. @Resource
  15. private MemberService memberService;
  16. //添加会员
  17. // 接口:http://localhost:10000/member/add
  18. // 提交的数据类型:{
  19. // "name":"jack",
  20. // "pwd":"123",
  21. // "mobile":"123456789000",
  22. // "email":"jack@sohu.com",
  23. // "gender":"0"
  24. // }
  25. @PostMapping("/add")
  26. public Result<Member> add(@RequestBody Member member) {
  27. log.info("Member=" + member);
  28. int affect = memberService.save(member);
  29. if (affect < 0) {// 添加失败
  30. return Result.error("-1", "添加失败");
  31. }
  32. // 添加成功-将Member以JSON格式响应给浏览器
  33. return Result.success("添加成功", member);
  34. }
  35. // 查询会员-id
  36. // 接口:http://localhost:10000/member/queryMemberById?id=1;
  37. @GetMapping("/queryMemberById")
  38. public Result<Member> queryMemberById(@RequestParam(value = "id") Long id) {
  39. Member member = memberService.queryMemberById(id);
  40. if (member == null) {
  41. return Result.error("-1", "该用户不存在!");
  42. }
  43. return Result.success("查询成功", member);
  44. }
  45. }

2-7 修改 application.yml 配置文件中数据库的配置

2-8 PostMan 测试

添加

接口:http://localhost:10000/member/add

提交的数据类型 JSON:

{

"name":"jack",

"pwd":"123",

"mobile":"123456789000",

"email":"jack@sohu.com",

"gender":"0"

}

查询

2-9 查看数据库-添加

三.创建使用微服务模块

各个模块之间接口的相互调用的关系

service consumer-消费模块的 Controller 层

调用 service provider-模块中的接口的Controller服务的功能

思路分析:

相互访问对方接口的模块必须都要启动SpringBoot主程序

3-1 复制主项目的绝对路径

3-2 新建模块

查看当前子模块是否在父模块中

3-3 加入相关依赖 pom.xml

dependencys 标签中加入如下的依赖

  1. <!--springBoot-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. <!-- 如果在子工程/模块指定了 version,则以指定为准 -->
  6. </dependency>
  7. <!-- 监控-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-actuator</artifactId>
  11. </dependency>
  12. <!-- mybatis-->
  13. <dependency>
  14. <groupId>org.mybatis.spring.boot</groupId>
  15. <artifactId>mybatis-spring-boot-starter</artifactId>
  16. </dependency>
  17. <!-- lombok-->
  18. <dependency>
  19. <groupId>org.projectlombok</groupId>
  20. <artifactId>lombok</artifactId>
  21. <optional>true</optional>
  22. </dependency>
  23. <!-- test-->
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-test</artifactId>
  27. <scope>test</scope>
  28. </dependency>

3-4 刷新 Maven 项目-查看当前子项目的依赖,是否与父项目的依赖版本是一致的

3-5 配置 application.yml

/resources/ application.yml

分析:只需要配置端口即可

我们直接通过当前的接口去调用到另外的模块的接口进行增删改查

  1. server:
  2. port: 80

思路分析:

我们只需要启动 SpringBoot,并在 Controller 的接口方法中

调用到 service-provider 模块中 Controller 层中接口的方法

3-6 创建启动类-springBoot

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. // scanBasePackages = {"com.wwf"} 配置包扫描注解的路径
  6. @SpringBootApplication(scanBasePackages = {"com.wwf"})
  7. public class MainApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(MainApplication.class, args);
  10. }
  11. }

3-7 创建 JavaBean

3-8 新建工具类 Result

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. * @author 卒迹
  5. * @version 1.0
  6. */
  7. /**
  8. * 1. 用于返回结果, 利于 json 格式
  9. * 2. 这个工具类, 在网上也可找到
  10. */
  11. public class Result<T> {
  12. private String code;
  13. private String msg;
  14. private T data;
  15. public String getCode() {
  16. return code;
  17. }
  18. public void setCode(String code) {
  19. this.code = code;
  20. }
  21. public String getMsg() {
  22. return msg;
  23. }
  24. public void setMsg(String msg) {
  25. this.msg = msg;
  26. }
  27. public T getData() {
  28. return data;
  29. }
  30. public void setData(T data) {
  31. this.data = data;
  32. }
  33. public Result() {
  34. }
  35. public Result(T data) {
  36. this.data = data;
  37. }
  38. public static Result success() {
  39. Result result = new Result<>();
  40. result.setCode("200");
  41. result.setMsg("success");
  42. return result;
  43. }
  44. public static <T> Result<T> success(T data) {
  45. Result<T> result = new Result<>(data);
  46. result.setCode("200");
  47. result.setMsg("success");
  48. return result;
  49. }
  50. public static <T> Result<T> success(String msg, T data) {
  51. Result<T> result = new Result<>(data);
  52. result.setCode("200");
  53. result.setMsg(msg);
  54. return result;
  55. }
  56. public static Result error(String code, String msg) {
  57. Result result = new Result();
  58. result.setCode(code);
  59. result.setMsg(msg);
  60. return result;
  61. }
  62. public static <T> Result<T> error(String code, String msg, T data) {
  63. Result<T> result = new Result<>(data);
  64. result.setCode(code);
  65. result.setMsg(msg);
  66. return result;
  67. }
  68. }

3-9 新建配置类

  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. */
  5. @Configuration// 自动将Bean对象注入到IOC容器中
  6. public class CustomizationBean {
  7. @Bean
  8. public RestTemplate getRestTemplate() {
  9. return new RestTemplate();
  10. }
  11. }

3-10 Controller 层

通过当前模块 Controller 层的接口,

去访问另外模块中的 Controller 的接口

前提是服务的端口都要是启动的

10000 端口和80端口服务是启动的状态

3-11 测试访问当前端口为 80 的接口的方法

该端口为 80 的接口的方法

会去请求转发访问 10000 端口的 Controller 层接口的方法

http://localhost:80/member/consumer/save

80 端口的查询的接口

访问该 80 端口 的接口:

http://localhost:80/member/consumer/get/1

会去调用 10000 端口的接口

http://localhost:10000/member/queryMemberById?id=1

四.创建共用模块-供其他模块使用

我们可以发现在 80 和 10000 端口两个服务中,都用到了相同的 Bean

4-1 创建公共的模块 Moduel

创建 e_commerce_center-common-api

验证是否创建成功-查看父项目 pom.xml 的子模块导入情况

查看当前子模块 pom 的父级项目的依赖关系

查看当前子模块是否在父级项目内

4-2 修改当前子模块 的 pom.xml 配置

这里按照项目的实际情况,引入相应的需要封装公共模块的 api

当前我的项目,现在只需要封装 Bean,所以只需要引入 lombok 即可

  1. <dependency>
  2. <groupId>org.projectlombok</groupId>
  3. <artifactId>lombok</artifactId>
  4. <!--
  5. 老师解读<optional>true</optional>:
  6. 1. true 表示两个项目之间依赖不传递
  7. 2. 小伙伴可以这里理解<optional>true</optional>: 防止将该依赖传递到其他模块中
  8. 说的再具体一点,比如 member-service-consumer-80 模块依赖了本项目,
  9. 那么本项目不会把 lombok 传递给 member-service-consumer-80
  10. 3. 不设置 optional 或者 optionalfalse,表示传递依赖
  11. -->
  12. <optional>true</optional>
  13. </dependency>
  14. <!-- 以后需要什么可以这里在引入. -->

4-3 抽取共用 API/类

  1. @AllArgsConstructor
  2. @NoArgsConstructor
  3. @Data
  4. //Serializable 加上,后面可能使用
  5. public class Member implements Serializable {
  6. private Long id;
  7. private String name;
  8. private String pwd;
  9. private String mobile;
  10. private String email;
  11. private Integer gender;
  12. }
  1. /**
  2. * @author 卒迹
  3. * @version 1.0
  4. * @author 卒迹
  5. * @version 1.0
  6. */
  7. /**
  8. * 1. 用于返回结果, 利于 json 格式
  9. * 2. 这个工具类, 在网上也可找到
  10. */
  11. public class Result<T> {
  12. private String code;
  13. private String msg;
  14. private T data;
  15. public String getCode() {
  16. return code;
  17. }
  18. public void setCode(String code) {
  19. this.code = code;
  20. }
  21. public String getMsg() {
  22. return msg;
  23. }
  24. public void setMsg(String msg) {
  25. this.msg = msg;
  26. }
  27. public T getData() {
  28. return data;
  29. }
  30. public void setData(T data) {
  31. this.data = data;
  32. }
  33. public Result() {
  34. }
  35. public Result(T data) {
  36. this.data = data;
  37. }
  38. public static Result success() {
  39. Result result = new Result<>();
  40. result.setCode("200");
  41. result.setMsg("success");
  42. return result;
  43. }
  44. public static <T> Result<T> success(T data) {
  45. Result<T> result = new Result<>(data);
  46. result.setCode("200");
  47. result.setMsg("success");
  48. return result;
  49. }
  50. public static <T> Result<T> success(String msg, T data) {
  51. Result<T> result = new Result<>(data);
  52. result.setCode("200");
  53. result.setMsg(msg);
  54. return result;
  55. }
  56. public static Result error(String code, String msg) {
  57. Result result = new Result();
  58. result.setCode(code);
  59. result.setMsg(msg);
  60. return result;
  61. }
  62. public static <T> Result<T> error(String code, String msg, T data) {
  63. Result<T> result = new Result<>(data);
  64. result.setCode(code);
  65. result.setMsg(msg);
  66. return result;
  67. }
  68. }

4-4 使用 Maven 打包成 jar

确保当前打包方式为 jar

在其他需要使用到公共部分的 模块中,引入当前打包的 Jar

该 Jar 为提取的公共的模块

  1. <!-- 引入 e_commerce_center-common-api -->
  2. <!-- 这里的groupId 你在创建模块的时候的groupId -->
  3. <dependency>
  4. <groupId>com.hspedu.springcloud</groupId>
  5. <artifactId>e_commerce_center-common-api</artifactId>
  6. <version>${project.version}</version>
  7. </dependency>

删除其他服务(端口)中抽取出来的公共 entity 和 response

我这里抽取出来的 entity 和 response 这两个包

在引入 Jar 包后,在当前模块中删除这两个

如果报错了,

可以看看 maaper.xml 中,JavaBean 配置的路径是否是正确的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/809731
推荐阅读
相关标签
  

闽ICP备14008679号