Spring Cloud--从零开始搭建微服务基础环境【二】

😀前言

本篇博文是关于Spring Cloud--从零开始搭建微服务基础环境【二】,希望你能够喜欢

🏠个人主页:晨犀主页

🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰

如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

微服务基础环境搭建【二】

创建会员中心微服务模块-service provider

需求说明/图解

1、通过浏览器可以获取会员信息(通过会员中心微服务模块)

  1. 使用Postman 测试查询

思路分析/图解

1、创建Moduel 并完成配置

2、创建数据库/表

3、创建entity-dao/Mapper.xml-service-controller

4、完成测试

实现步骤

创建Moduel & 完成配置

创建member-service-provider-10000 微服务模块提供会员服务
  • 具体操作步骤

父工程的pom.xml-会做相应变化,管理member-service-provider-10000 微服务子模块

修改member-service-provider-10000 的pom.xml , 加入相关依赖
  1. 修改pom.xml
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>e-commerce-center</artifactId>
        <groupId>com.nlc.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>member-service-provider-10000</artifactId>

    <!--引入相关的依赖: 我们引入了当前需要的依赖,后面如果有其它需要,再灵活调整-->
    <dependencies>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        
            <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
       	<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!-- 这里我们重新指定一下version -->
            <version>1.1.13</version>
        </dependency>

        <!--引入web-starter 说明我们使用版本仲裁(从父项目继承了版本)
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!--说明:starter-actuator 是springboot程序的监控系统, 可以实现系统的健康检测
        可以通过http://localhost:80/actuator 看到相关的连接,和信息
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>


        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
       </dependency>
        
           
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
        
        <!--引入spring-boot-starter-test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

</project>
  1. 刷新maven , 注意看引入的jar 的版本.
创建resources/application.yml
yml 复制代码
server:
  port: 10000

spring:
  application:
    name: member-service-provider #配置应用的名称
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
#配置mybatis
mybatis:
  mapper-locations: classpath:mapper/*.xml #指定mapper.xml文件位置
  type-aliases-package: com.my.springcloud.entity # 实例类所在的包,这样通过类名就可以引用
创建主启动类MemberApplication
java 复制代码
@SpringBootApplication
public class MemberApplication10000 {
    public static void main(String[] args) {
        SpringApplication.run(MemberApplication10000.class, args);
    }
}

创建数据库/表

sql 复制代码
CREATE DATABASE e_commerce_center_db
USE e_commerce_center_db
CREATE TABLE member
(
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)
);
INSERT INTO member VALUES
(NULL, 'smith', MD5('123'), '123456789000', 'smith@sohu.com', 1);
SELECT * FROM member

业务实现

创建entity
java 复制代码
@AllArgsConstructor
@NoArgsConstructor
@Data
//Serializable 加上,后面可能使用
public class Member implements Serializable {
    private Long id;
    private String name;
    private String pwd;
    private String mobile;
    private String email;
    private Integer gender;
}

创建com/my/springcloud/entity/Result.java

java 复制代码
/**
* 1. 用于返回结果, 利于json 格式
* 2. 这个工具类, 在网上也可找到
*/
public class Result<T> {
    private String code;
    private String msg;
    private T data;
    public String getCode() {
    	return code;
    }
    public void setCode(String code) {
    this.code = code;
    }
    public String getMsg() {
    	return msg;
    }
    public void setMsg(String msg) {
    	this.msg = msg;
    }
    public T getData() {
    	return data;
    }
    public void setData(T data) {
    	this.data = data;
    }
    public Result() {
    }
    public Result(T data) {
    	this.data = data;
    }
    public static Result success() {
        Result result = new Result<>();
        result.setCode("200");
        result.setMsg("success");
        return result;
    }
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>(data);
        result.setCode("200");
        result.setMsg("success");
        return result;
    }
    public static <T> Result<T> success(String msg, T data) {
        Result<T> result = new Result<>(data);
        result.setCode("200");
        result.setMsg(msg);
        return result;
    }
    public static Result error(String code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
    public static <T> Result<T> error(String code, String msg, T data) {
        Result<T> result = new Result<>(data);
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}
创建Dao

创建接口:com/my/springcloud/dao/MemberDao.java

java 复制代码
@Mapper
public interface MemberDao {
    //crud 接口...
    Member queryMemberById(Long id);
    int save(Member member);
}

创建resources/mapper/MemberMapper.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.my.springcloud.dao.MemberDao">

    <!--配置实现queryMemberById
    1. 这里可以使用 resultType="Member"
    2. 当然也可以使用resultMap="自定义的resultMap", 这里我们使用resultMap
    3. 如何配置一个resultMap ,在mybatis讲过的,请回顾
    -->
    <resultMap id="BaseResultMap" type="Member">
        <id column="id" property="id" jdbcType="BIGINT"></id>
        <id column="name" property="name" jdbcType="VARCHAR"></id>
        <id column="pwd" property="pwd" jdbcType="VARCHAR"></id>
        <id column="mobile" property="mobile" jdbcType="VARCHAR"></id>
        <id column="email" property="email" jdbcType="VARCHAR"></id>
        <id column="gender" property="gender" jdbcType="TINYINT"></id>
    </resultMap>

    <select id="queryMemberById" parameterType="Long" resultMap="BaseResultMap">
        SELECT * FROM `member` WHERE `id`=#{id}
    </select>

     <!--配置实现save -->
    <insert id="save" parameterType="Member" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO `member`(`NAME`,`pwd`,`mobile`,`email`,`gender`)
        VALUES(#{name}, MD5(#{pwd}), #{mobile}, #{email}, #{gender});
    </insert>
</mapper>

完成测试

创建Service

创建接口:com/my/springcloud/service/MemberService.java

java 复制代码
public interface MemberService {
    Member queryMemberById(Long id);
    int save(Member member);
}

创建com/my/springcloud/service/impl/MemberServiceImpl.java

java 复制代码
@Service
public class MemberServiceImpl implements MemberService {

    //装配MemberDao
    @Resource
    private MemberDao memberDao;
    @Override
    public Member queryMemberById(Long id) {
        return memberDao.queryMemberById(id);
    }
    @Override
    public int save(Member member) {
        return memberDao.save(member);
    }
}

完成测试

创建 Controller

创建:com/my/springcloud/controller/MemberController.java

java 复制代码
@RestController
@Slf4j
public class MemberController {

    //装配MemberService
    @Resource
    private MemberService memberService;

    //添加方法/接口
    //这里请小伙伴回顾, 应该如何提交
    //说明
    //1. 我们的前端如果是以json格式来发送添加信息Member, 那么我们需要使用@RequestBody
    //   , 才能将数据封装到对应的bean, 同时保证http的请求头的 content-type是对应
    //2. 如果前端是以表单形式提交了,则不需要使用@RequestBody, 才会进行对象参数封装, 同时保证
    //   http的请求头的 content-type是对应
    @PostMapping("/member/save")
    public Result save(@RequestBody Member member) {
        log.info("service-provider member={}", member);
        int affected = memberService.save(member);
        if (affected > 0) { //说明添加成功
            return Result.success("添加会员成功", affected);
        } else {
            return Result.error("401", "添加会员失败");
        }
    }

    //查询的方法/接口
    //这里使用url占位符+@PathVariable
    @GetMapping("/member/get/{id}")
    public Result getMemberById(@PathVariable("id") Long id, HttpServletRequest request) {

        //String color = request.getParameter("color");
        //String address = request.getParameter("address");
        //模拟超时, 休眠5s
        //try {
        //    TimeUnit.MILLISECONDS.sleep(5000);
        //} catch (InterruptedException e) {
        //    e.printStackTrace();
        //}

        Member member = memberService.queryMemberById(id);

        //使用Result把查询到的结果返回
        if (member != null) {
            //return Result.success("查询会员成功 member-service-provider-10000 " + color + "-" + address, member);
            return Result.success("查询会员成功 member-service-provider-10000", member);
        } else {
            return Result.error("402", "ID= " + id + "不存在");
        }

    }
}

完成测试

浏览器

浏览器输入: http://localhost:10000/member/get/1

PostMan:
  1. 测试查询
  1. 测试添加

注意事项和细节

1、我们的前端如果是以json 格式来发送添加信息furn,那么我们需要使用@RequestBody,才能将数据封装到对应的bean, 同时保证http 的请求头的content-type 是对应。

2、如果前端是以表单形式提交了/或者是以parameters,则不需要使用@RequestBody, 才会进行对象参数封装, 同时保证http 的请求头的content-type 是对应。

3、在进行SpringBoot 应用程序测试时,引入的JUnit 是org.junit.jupiter.api.Test。

4、在运行程序时,一定要确保你的XxxxMapper.xml 文件被自动放到的target 目录的classes 指定目录。

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁

希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻

如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关推荐
驭渊的小故事10 小时前
Spring AI Alibaba 实战:从maven依赖治理到声明式工具调用
java·人工智能·spring
步行cgn11 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
SL_staff14 小时前
金融风控规则引擎的深度实践:JVS-Rules 四大原生能力解析
spring cloud·产品·全栈
萧瑟余晖14 小时前
Spring Cloud配置中心与动态刷新详解
spring cloud·面试
Doker 多克17 小时前
Spring Integration AMQP 和 Spring AMQP详解
java·后端·spring
code_slave(码畜)19 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
雷一言说19 小时前
Spring AI 2.0 Agent Skills 接入
spring
萧瑟余晖20 小时前
Spring Cloud综合实战与架构选型详解
spring·spring cloud·架构
萧瑟余晖21 小时前
Spring Cloud Alibaba生态整合详解
spring·spring cloud·面试
每天一道题1 天前
Kafka 为什么会重复消费?从 Producer ACK、Offset 到消息可靠性
后端·微服务