Springboot整合mybatis

Mybatis逆向工程笔记细节
点击run ,里边的edit
搭建项目的注意细节 - 图1
配置mybatis-generator.xml
搭建项目的注意细节 - 图2
(69条消息) SpringBoot整合Mybatis完整详细版_海岛拾贝的博客-CSDN博客_springboot整合mybatis
剩余细节观看此片博文
报错
搭建项目的注意细节 - 图3

搭建Springboot网上项目

最终结果展示图
搭建项目的注意细节 - 图4
Mvc分层
搭建项目的注意细节 - 图5
控制层 接收转发URL,调用service层处理数据
搭建项目的注意细节 - 图6
Dao层对应mapper接口,通过mapper.xml文件控制操作数据库,实现对应处理数据方法
搭建项目的注意细节 - 图7
Entity实现对应数据库的Java类 提供get set方法
搭建项目的注意细节 - 图8
Service层处理controller层传过来的数据,实现mapper接口的方法
搭建项目的注意细节 - 图9
Model作为前端展示的页面,加密密码!!省去重要信息
搭建项目的注意细节 - 图10
提供公共接口供serviceimpl调用 解耦合
搭建项目的注意细节 - 图11
启动类 自动配置,省去打war包 Tomcat内嵌
搭建项目的注意细节 - 图12
反向代理生成mapepr文件,被解析操作数据库
搭建项目的注意细节 - 图13

Yml细节配置,配置数据源 连接数据库
搭建项目的注意细节 - 图14

Linux搭建mysql

两个重要的博客
如何部署到Linux上?

(69条消息) Linux服务器搭建(三)安装mysql_王相斐的博客-CSDN博客

(69条消息) 解决MySQL登录报ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)的问题_日出东方VS唯我不败的博客-CSDN博客:+Access+denied+for+user+root@localhost+(using+password:+NO&spm=1018.2226.3001.4187)

解决密码简单问题
(69条消息) 解决You must reset your password using ALTER USER statement before executing this statement.错误_生于冬热爱架构的博客-CSDN博客

如何导入sql文件到Linux上
(69条消息) 将本地数据库上传到Linux服务器Thinkao~的博客-CSDN博客上传数据集到服务器

最终结果成功!
搭建项目的注意细节 - 图15

Jmeter笔记
搭建项目的注意细节 - 图16
不要忘了写这个
搭建项目的注意细节 - 图17
搭建项目的注意细节 - 图18
Jemeter压测与网址对应
搭建项目的注意细节 - 图19
复制到另外一台服务器命令
搭建项目的注意细节 - 图20
mysql这个数据库下的user表里记录着可以访问到数据库的IP,执行命令改成所有ip输入密码都可以
搭建项目的注意细节 - 图21
结果
搭建项目的注意细节 - 图22
开放支持所有IP,修改application.propoties文件修改数据库地址,

Css文件传到Nginx服务器下
搭建项目的注意细节 - 图23

搭建项目的注意细节 - 图24

可配置多个server节点
搭建项目的注意细节 - 图25
alias作用:替换resources到后边那段url
搭建项目的注意细节 - 图26
搭建项目的注意细节 - 图27
upstream关键字实现负载均衡
搭建项目的注意细节 - 图28
总图
搭建项目的注意细节 - 图29
追加到application.propoties文件中
搭建项目的注意细节 - 图30
结果,检查反向代理是否成功!
搭建项目的注意细节 - 图31

Redis没有实现序列化 报错
搭建项目的注意细节 - 图32
只需接收这两个注解就OK可实现分布式会话
搭建项目的注意细节 - 图33
加上配置 就OK
搭建项目的注意细节 - 图34
示例:存入3个key
搭建项目的注意细节 - 图35
以配置文件启动!!
搭建项目的注意细节 - 图36
不配置的话默认所有IP都可访问Redis
搭建项目的注意细节 - 图37
修改application.propreties文件 分布式 分别修改到云端
搭建项目的注意细节 - 图38
做分布式会话处理!!!
搭建项目的注意细节 - 图39

搭建Redis

版本问题解决
(69条消息) server.c:5166:39: error: ‘struct redisServer’ has no member named ‘maxmemory’_xixiyuguang的博客-CSDN博客;&spm=1018.2226.3001.4187)

Redis基本配置yml
(69条消息) yml配置,Redis基本配置_甜甜粥粥的博客-CSDN博客_yml配置redis密码

每个项目修改properties文件
搭建项目的注意细节 - 图40
注意序列化
搭建项目的注意细节 - 图41
搭建项目的注意细节 - 图42
一定要注意序列化
否则报错,搜不到信息
org.springframework.data.redis.serializer.SerializationException: Cannot serialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to serialize object using DefaultSerializer; nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable payload but received an object of type [org.example.service.model.ItemModel]

Rocketmq细节

搭建项目的注意细节 - 图43

Idea快捷键

4、Ctrl+Alt+B查看子类方法实现;

5、Alt+F7查找类或方法在哪被使用;

6、Ctrl+F/Ctrl+Shift+F按照文本的内容查找 ;

  1. Ctrl+F是在本页查找,Ctrl+Shift+F是全局查找

7、Shift+Shift搜索任何东西

  1. shift+shift非常强大,可搜索类、资源、配置项、方法等,还能搜索路径。

微服务

搭建项目的注意细节 - 图44搭建项目的注意细节 - 图45
搭建项目的注意细节 - 图46
搭建项目的注意细节 - 图47
搭建项目的注意细节 - 图48

Zookeeper简单概念

搭建项目的注意细节 - 图49

如何调用不同ip地址上的服务?


搭建项目的注意细节 - 图50
那么dubbo是怎么判断哪个是生产者,哪个是消费者,又是怎么把他们两者关联起来的?
其实很简单,暴露服务的就是生产者,如下图的@Service注解
要注意,这里是dubbo包下的,可不是Spring包下的。只要配置了@Service就相当于暴露了服务,启动以后,会被dubbo识别有个生产者注册接口,TestService。
注意是接口

@Reference注解服务引入的过程是这样的:

得到当前所引入服务对应的ServiceBean的beanName
根据@Reference注解的所有信息+属性接口类型得到一个referenceBeanName
如果referenceBeanCache没有ReferenceBean对象,则创建一个ReferenceBean,有则获取
根据referencedBeanName(ServiceBean的beanName)判断Spring容器中是否存在该bean
①:如果存在,则给ReferenceBean的ref属性(代理对象)取一个别名,别名为referenceBeanName。
②:如果不存在 ,则将创建出来的ReferenceBean注册到Spring容器中,由于ReferenceBean是一个FactoryBean,后续可以通过getObject()方法获取到ref代理对象
通过referenceBean.get()方法返回一个ref代理对象,作为注入点赋值对象!
答案:可以,但前提条件是在别的地方使用过@Reference注入了DemoService 接口服务!因为Dubbo在扫描到@Reference后,回向容器中注入一个ReferenceBean
ReferenceBean又实现了FactoryBean接口,可通过getObject方法向容器中注入DemoService代理对象
而且@Reference的bean的后置处理器是优先于@Autowired被加载的
此时,@Autowired从容器中获取DemoService代理对象时,容器中已有该代理对象存在,所以可以使用@Autowired注入某个服务!

Dubbo没有使用Spring自带的扫描器,而是自定义了自己的扫描器DubboClassPathBeanDefinitionScanner,自定义扫描器继承于Spring的扫描器,不使用Spring默认的过滤逻辑,并添加新的过滤逻辑:只扫描Dubbo包下的@Service注解,这样既利用了Spring的包扫描逻辑,又自定义了扫描逻辑,这一点算是Dubbo对Spring框架的一点扩展!

3. Dubbo如何处理@Service

Dubbo通过@EnableDubbo(scanBasePackages = “org.apache.dubbo.demo.provider”)扫描到对应路径下的@Service注解 ,主要做了两件事情,得到两个Bean
扫描@Service标注的类,得到一个BeanDefinition,一个Spring中的Bean
在扫描完了之后,会针对所得到的每个BeanDefinition,都会额外的再生成一个ServiceBean类型的Bean对象。这个ServiceBean通过Ref属性与Spring中的Bean联系起来!

①:Dubbo为什么要多生成一个ServiceBean?

因为对于Dubbo来说@Service标注的对象是一个服务,并且,还需要解析@Service注解的配置信息例如:@Service(version = “timeout”, timeout = 4000),因为这些都是服务的参数信息,所以需要一个额外的ServiceBean来存储这些信息,另外暴露服务也需要
timeout = 4000 服务超时时间
ServiceBean
ServiceBean
ServiceBean表示一个Dubbo服务,ServiceBean对象中的参数就表示服务的参数,比如timeout,该对象的参数值来至@Service注解中所定义的。还有其他参数,比如:
ref,表示服务的具体实现类
interface,表示服务的接口
parameters,表示服务的参数(@Service注解中所配置的信息)
application,表示服务所属的应用
protocols,表示服务所使用的协议
registries,表示服务所要注册的注册中心

Service如何暴露服务?

ServiceBean由于实现了ApplicationListener,发布了一个容器刷新事件,意味着在spring容器启动完毕后,会调用onApplicationEvent方法,在方法内部调用export()向注册中心暴露服务!

2. 服务导出原理

服务导出:主要是指 服务提供者向注册中心上提供服务的过程

Dubbo的服务导出主要做以下几件事情
  1. 根据配置方式的优先级,刷新Dubbo配置参数 一个Dubbo服务的配置参数有多种,比如version、group、delay、weight等等 因为LinkedList是有序集合,方便后续对配置按优先级顺序进行覆盖和更新
  2. 确定协议,生成URL 一个服务可以配置多个协议 源码中会遍历所有的协议,每一种协议导出一个单独的服务 上面所说的服务URL或者注册中心URL,并不是浏览器上的url连接地址,而是一个名为URL的类,类内部封装了端口号、ip、协议等注册信息
  3. 根据服务的参数信息,启动对应的网络服务器(netty、tomcat、jetty等),用来接收网络请求 有了确定的协议,服务名,服务参数后,自然就可以组装成服务的URL了

    Dubbo在与其他组件交互的时候,会使用在服务URL中指定的协议,根据不同的协议启动不同的服务器,比如:

  • Http协议就启动Tomcat、Jetty。
  • Dubbo协议就启动Netty。
  1. 将服务的信息注册到注册中心 有了服务URL 和 注册中心的地址的URL,就可以向zookeeper注册服务,注册失败的话会进行重试!
  2. 启动监听器,监听动态配置修改

    Dubbo如果使用的是zookeeper作为配置中心,那么服务配置就存储在zookeeper节点上,就需要利用Zookeeper的Watcher机制,监听的是节点变化。所以在一个服务进行导出时,需要在服务提供者端给当前服务生成一个对应的监听器实例
    当动态配置中心修改了某个服务的配置后,就会触发OverrideListener中的notify对注册中心的URL进行重写覆盖,相当于重新发布服务,实现实时发布服务

    全局异常

    那有没有一种方案,既不需要跟Controller耦合,也可以将定义的 异常处理器 应用到所有控制器呢?所以注解@ControllerAdvice出现了,简单的说,该注解可以把异常处理器应用到所有控制器,而不是单个控制器。借助该注解,我们可以实现:在独立的某个地方,比如单独一个类,定义一套对各种异常的处理机制,然后在类的签名加上注解@ControllerAdvice,统一对 不同阶段的、不同异常 进行处理。这就是统一异常处理的原理。
    注意到上面对异常按阶段进行分类,大体可以分成:进入Controller前的异常 和 Service 层异常,具体可以参考下图:
    这样一来,之前缺点:就必须在每一个Controller类都定义一套这样的异常处理方法,因为异常可以是各种各样。这样一来,就会造成大量的冗余代码,而且若需要新增一种异常的处理逻辑,就必须修改所有Controller类了,很不优
    个人理解:
    ResponseBodyAdvice 接口是在 Controller 执行 return 之后,在 response 返回给客户端之前,执行的对 response 的一些处理,可以实现对 response 数据的一些统一封装或者加密等操作。
    对controller返回的数据进行增强,加入了错误码,错误类型,成功或失败,返回json数据供前端解析,用map集合接收!
    该接口一共有两个方法:
    (1)supports —— 判断是否要执行beforeBodyWrite方法,true为执行,false不执行 —— 通过supports方法,我们可以选择哪些类或哪些方法要对response进行处理,其余的则不处理。
    (2)beforeBodyWrite —— 对 response 处理的具体执行方法。
    搭建项目的注意细节 - 图51

如何使用配置idea

搭建项目的注意细节 - 图52
搭建项目的注意细节 - 图53

配置maven和runner

搭建项目的注意细节 - 图54
第二次不用本地下,快一点
搭建项目的注意细节 - 图55

查看pom文件关系图

搭建项目的注意细节 - 图56

Xml文件不能用问题

参考博客 重点
(79条消息) IDEA xml 文件,变成了灰色,解决方法_何锦洋的博客-CSDN博客_ideaxml文件全部变灰了

Idea实用插件

参考博客
https://blog.csdn.net/zhangtao_sb/article/details/122056051

(79条消息) IDEA中配置maven环境_三点.的博客-CSDN博客_idea配置maven环境

Idea如何配置maven

参考博客

Springboot注解常见

@RestController 包含@ResponseBody 自动转换为json格式数据返回
搭建项目的注意细节 - 图57

Get方法获取参数获取参数注解

搭建项目的注意细节 - 图58

@RequestBody :Json转Javabean对象

Controller实现增删改查

搭建项目的注意细节 - 图59

Linux安装MySQL常见问题

参考博客:(77条消息) Linux安装mysql(mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar)(万能解决登录问题,最详细教程)_NoClient的博客-CSDN博客

(77条消息) MySQL登录时ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ 完美解决_Adam`南帝·梁的博客-CSDN博客:+Access+denied+for+user+root@localhost+(using+password:+YES)&spm=1018.2226.3001.4187)

先用MySQL导出sql文件,传入Linux,再用source命令导入
搭建项目的注意细节 - 图60
搭建项目的注意细节 - 图61

IDEA 新pull的文件模块不能用问题

(78条消息) 小记:idea中remove后的项目变灰色了,如何重新变回高亮_落笔云的博客-CSDN博客

注意:还有个问题

如果之前导入的包没成功,修改之后还爆红,可能是因为需要删除上边的包,重新倒一边就好了

2-6-密码加密与微服务鉴权JWT的反馈很重要,体会docker的作用

Springcould 注意版本对应,网上都有

负载均衡,默认一个一个服务平均,四个的话,调用四次就每个都来一遍,但顺序随机

SpringCloud微服务组件详情

微服务

熔断器

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种 因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
网关

2.1 为什么需要微服务网关

不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才 能完成一个业务需求。比如一个电影购票的收集APP,可能回调用电影分类微服务,用户微服务,支付微服务等。如果客户端直接和微服务进行通信,会存在一下问题:
# 客户端会多次请求不同微服务,增加客户端的复杂性
# 存在跨域请求,在一定场景下处理相对复杂
# 认证复杂,每一个服务都需要独立认证

搭建项目的注意细节 - 图62
相当于URL给你加前缀,然后注上要调用的serviceID
搭建项目的注意细节 - 图63
从Git上拿配置文件config

搭建项目的注意细节 - 图64
网关是注册中心的一个服务,当服务注册后,可以调用网关去分发,从而调用不同的服务形成管理。

RocketMQ安装细节

内存不够报错,
搭建项目的注意细节 - 图65

跨域问题:

f12控制台显示跨域,显示CORS规范,请求200,响应数据不返回数据。
网络响应显示无法加载数据,有200状态

处理

搭建项目的注意细节 - 图66

显示截图

搭建项目的注意细节 - 图67
无法响应数据
搭建项目的注意细节 - 图68

Redis配置问题:

开放端口,修改配置文件conf,bind =0.0.0.0;开放端口可用,并且关闭保护模式

Mq问题

先开启nameserve,然后在开启broker。

先看后端数据是否返回正常,然后利用Redis可视化工具查看是否有key
打断点或者日志