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

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

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

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • 微服务基础环境搭建【二】
    • 创建会员中心微服务模块-service provider
      • 需求说明/图解
      • 思路分析/图解
      • 实现步骤
        • 创建Moduel & 完成配置
          • 创建member-service-provider-10000 微服务模块[提供会员服务]
          • 修改member-service-provider-10000 的pom.xml , 加入相关依赖
          • 创建resources/application.yml
          • 创建主启动类MemberApplication
        • 创建数据库/表
        • 业务实现
          • 创建entity
          • 创建Dao
          • 创建Service
          • 创建 Controller
        • 完成测试
          • 浏览器
          • PostMan:
        • 注意事项和细节

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

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

需求说明/图解

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

image-20230823163221890

  1. 使用Postman 测试查询

image-20230823163424296

思路分析/图解

1、创建Moduel 并完成配置

2、创建数据库/表

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

4、完成测试

实现步骤

创建Moduel & 完成配置

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

image-20230824212342558

image-20230824212721760

image-20230824212919589

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

image-20230824213348303

修改member-service-provider-10000 的pom.xml , 加入相关依赖
  1. 修改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>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 的版本.

image-20230824214701316

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

创建数据库/表

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
@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

/**
* 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

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

创建resources/mapper/MemberMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.my.springcloud.dao.MemberDao"><!--配置实现queryMemberById1. 这里可以使用 resultType="Member"2. 当然也可以使用resultMap="自定义的resultMap", 这里我们使用resultMap3. 如何配置一个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

public interface MemberService {Member queryMemberById(Long id);int save(Member member);
}

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

@Service
public class MemberServiceImpl implements MemberService {//装配MemberDao@Resourceprivate MemberDao memberDao;@Overridepublic Member queryMemberById(Long id) {return memberDao.queryMemberById(id);}@Overridepublic int save(Member member) {return memberDao.save(member);}
}

完成测试

创建 Controller

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

@RestController
@Slf4j
public class MemberController {//装配MemberService@Resourceprivate 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

image-20230825104014109

PostMan:
  1. 测试查询

image-20230825104159619

  1. 测试添加

image-20230825104405643

注意事项和细节

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

image-20230825104441202

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

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

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

image-20230825104536551

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124840.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以antd为例 React+Typescript 引入第三方UI库

本文 我们来说说 第三方UI库 其实应用市场上的 第三方UI库都是非常优秀的 那么 react 我们比较熟的肯定还是 antd 我们还是来用它作为演示 这边 我们先访问他的官网 https://3x.ant.design/index-cn 点击开始使用 在左侧 有一个 在 TypeScript 中使用 通过图标我们也可以看出…

1000元订金?华为折叠屏手机MateX5今日开始预订,售价尚未公布

华为最新款折叠屏手机Mate X5今日在华为商城开始预订&#xff0c;吸引了众多消费者的关注。预订时需交纳1000元的订金&#xff0c;而具体售价尚未公布。据华为商城配置表显示&#xff0c;Mate X5预计将搭载Mate 60系列同款麒麟9000S处理器&#xff0c;或可能搭载麒麟9100处理器…

深入理解联邦学习——联邦学习的分类

分类目录&#xff1a;《深入理解联邦学习》总目录 在实际中&#xff0c;孤岛数据具有不同分布特点&#xff0c;根据这些特点&#xff0c;我们可以提出相对应的联邦学习方案。下面&#xff0c;我们将以孤岛数据的分布特点为依据对联邦学习进行分类。 考虑有多个数据拥有方&…

品牌渠道中的价值治理思路介绍

为什么要治理渠道价格&#xff1f; 价格的高低会影响产品的销量&#xff0c;间接影响品牌的发展&#xff0c;同时低价会存在传播性&#xff0c;不低价的店铺会受低价店铺的影响&#xff0c;为了销量会选择低价跟价&#xff0c;当低价链接不断增加&#xff0c;那渠道势必会越来…

hive中遇到length函数不支持bigint

背景 hive中遇到length函数不支持bigint 解决方法&#xff0c;sql转为string之后计算长度 SELECT COUNT(1) FROM ( select msisdn FROM tb_nrmr_sample_lt_dd_total where loc_time in (23090201,23090202,23090203,23090204,23090205,23090206) and length(cast(msisdn as…

2023年全国大学生数学建模B题

多波束测线问题 1.问题提出 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c;在不同界面上产生反射&#xff0c;利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信号&#xff0c;并记录从声波发射到信号接…

2023国赛数学建模A题思路分析 - 定日镜场的优化设计

# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

vue知识点————插槽 slot

slot 插槽 在父组件中引用的子组件 在父组件中写入百度 可在子组件slot插槽中展示出 父组件 <template><div id"app"><child url"https://www.baidu.com">百度</child></div> </template><script> import chil…

VMware 安装 黑群晖7.1.1-42962 DS918+

本例的用的文件 1、ARPL 1.0beat 引导文件 vmdk格式&#xff1a; https://download.csdn.net/download/mshxuyi/88309308 2、DS918_42962.pat&#xff1a;https://download.csdn.net/download/mshxuyi/88309383 一、引导文件 1、创建一个虚拟机 2、下一步&#xff0c;选稍后…

使用ChatGLMTokenizer处理json格式数据

我下载了一些中文wikipedia数据&#xff0c;准备采用ChatGLMTokenizer对齐进行清洗&#xff0c;整理为预训练语料。 import numpy as np import json from tqdm import tqdm from chatglm_tokenizer.tokenization_chatglm import ChatGLMTokenizertokenizer ChatGLMTokenizer…

PPT 架构师三板斧

PPT 架构师三板斧 目录概述需求&#xff1a; 设计思路实现思路分析1.多节点上PPT 架构师三板斧2.几张框框组合有组织3.专业词汇4.切记点要点 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;ski…

PyCharm下载安装

PyCharm下载链接 点击下载PyCharm Community Edition社区版&#xff08;PyCharm Professional专业版需要收费&#xff0c;但可以免费试用 30 天&#xff0c;也可以找到激活方式&#xff1b;而社区版是完全免费的&#xff0c;初学者学习 Python建议使用社区版&#xff0c;不会有…

人工智能在电子商务中的突破性优势

最近都听说人工智能&#xff08;AI&#xff09;吗&#xff1f;电子商务的人工智能方面尤其受欢迎。当您以正确的方式使用正确的 AI技术时&#xff0c;您可以彻底改变您的经营方式。AI可帮助您节省时间、减少手动工作并提高数据的质量和准确性。 从本质上讲&#xff0c;您现在可…

C++ 围炉札记

文章目录 内存检测ProtoBufCMake、vscode、clion、Qt右值1、临时变量右值引用2、右值引用本质 函数返回std::functionPOD&#xff08;Plain Old Data&#xff09;thread_localnew / delete1、定位new运算符 可变参数模板typename和class1、C模板类头文件和实现文件分离的方法2、…

nested exception is java.io.FileNotFoundException

完整的错误信息&#xff1a; [main] ERROR o.s.boot.SpringApplication - Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.heima.article.ArticleApplication]; nested exception is java…

PostMan传时间参数一次性发送多次请求

文章目录 1. Date类型的参数&#xff0c; "date": "2023-09-07 22:01:51"格式会报错2. 在Pre-request Script预置时间3. 使用postman一次性发送多次请求 1. Date类型的参数&#xff0c; “date”: "2023-09-07 22:01:51"格式会报错 2. 在Pre-req…

如何查看MySQL的安装位置

MySQL的安装位置 1、查看安装目录 参数 路径 解释 备注 --basedir /usr/bin 相关命令目录 mysqladmin mysqldump等命令 --datadir /var/lib/mysql/ mysql 数据库文件的存放路径 --plugin-dir /usr/lib64/mysql/plugin mysql插件存放路径 --log-error …

基于pytorch LSTM 的股票预测

学习记录于《PyTorch深度学习项目实战100例》 https://weibaohang.blog.csdn.net/article/details/127365867?ydrefereraHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ3MjU2MTYyL2NhdGVnb3J5XzEyMDM2MTg5Lmh0bWw%2Fc3BtPTEwMDEuMjAxNC4zMDAxLjU0ODI%3D 1.tushare Tushare是一个免费、…

Mariadb高可用(四十)

目录 一、概述 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;组成 &#xff08;三&#xff09;特点 &#xff08;四&#xff09;工作原理 二、实验要求 三、构建MHA &#xff08;一&#xff09;ssh免密登录 &#xff08;二&#xff09;安装mariadb数据库…

【工作技术栈】【源码解读】一次springboot注入bean失败问题的排查过程

目录 前言现象分析原因解决方法思考感悟 前言 对这次的过程排查如果要形容的话&#xff0c;我觉得更像是悬疑剧&#xff0c;bean not found 这种错误&#xff0c;已经看腻了&#xff0c;甚至有时候都看不起这种错误&#xff0c;但是似乎这个想法被springboot听见了&#xff0c…