Springboot整合mybatis
Mybatis逆向工程笔记细节
点击run ,里边的edit
配置mybatis-generator.xml
(69条消息) SpringBoot整合Mybatis完整详细版_海岛拾贝的博客-CSDN博客_springboot整合mybatis
剩余细节观看此片博文
报错
搭建Springboot网上项目
最终结果展示图
Mvc分层
控制层 接收转发URL,调用service层处理数据
Dao层对应mapper接口,通过mapper.xml文件控制操作数据库,实现对应处理数据方法
Entity实现对应数据库的Java类 提供get set方法
Service层处理controller层传过来的数据,实现mapper接口的方法
Model作为前端展示的页面,加密密码!!省去重要信息
提供公共接口供serviceimpl调用 解耦合
启动类 自动配置,省去打war包 Tomcat内嵌
反向代理生成mapepr文件,被解析操作数据库
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)
如何导入sql文件到Linux上
(69条消息) 将本地数据库上传到Linux服务器Thinkao~的博客-CSDN博客上传数据集到服务器
最终结果成功!
Jmeter笔记
不要忘了写这个
Jemeter压测与网址对应
复制到另外一台服务器命令
mysql这个数据库下的user表里记录着可以访问到数据库的IP,执行命令改成所有ip输入密码都可以
结果
开放支持所有IP,修改application.propoties文件修改数据库地址,
Css文件传到Nginx服务器下
可配置多个server节点
alias作用:替换resources到后边那段url
upstream关键字实现负载均衡
总图
追加到application.propoties文件中
结果,检查反向代理是否成功!
Redis没有实现序列化 报错
只需接收这两个注解就OK可实现分布式会话
加上配置 就OK
示例:存入3个key
以配置文件启动!!
不配置的话默认所有IP都可访问Redis
修改application.propreties文件 分布式 分别修改到云端
做分布式会话处理!!!
搭建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文件
注意序列化
一定要注意序列化
否则报错,搜不到信息
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细节
Idea快捷键
4、Ctrl+Alt+B查看子类方法实现;
5、Alt+F7查找类或方法在哪被使用;
6、Ctrl+F/Ctrl+Shift+F按照文本的内容查找 ;
Ctrl+F是在本页查找,Ctrl+Shift+F是全局查找
7、Shift+Shift搜索任何东西
shift+shift非常强大,可搜索类、资源、配置项、方法等,还能搜索路径。
微服务
Zookeeper简单概念
如何调用不同ip地址上的服务?
那么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
2. 服务导出原理
Dubbo的服务导出主要做以下几件事情
- 根据配置方式的优先级,刷新Dubbo配置参数 一个Dubbo服务的配置参数有多种,比如version、group、delay、weight等等 因为LinkedList是有序集合,方便后续对配置按优先级顺序进行覆盖和更新
- 确定协议,生成URL 一个服务可以配置多个协议 源码中会遍历所有的协议,每一种协议导出一个单独的服务 上面所说的服务URL或者注册中心URL,并不是浏览器上的url连接地址,而是一个名为URL的类,类内部封装了端口号、ip、协议等注册信息
根据服务的参数信息,启动对应的网络服务器(netty、tomcat、jetty等),用来接收网络请求 有了确定的协议,服务名,服务参数后,自然就可以组装成服务的URL了
Dubbo在与其他组件交互的时候,会使用在服务URL中指定的协议,根据不同的协议启动不同的服务器,比如:
- Http协议就启动Tomcat、Jetty。
- Dubbo协议就启动Netty。
- 将服务的信息注册到注册中心 有了服务URL 和 注册中心的地址的URL,就可以向zookeeper注册服务,注册失败的话会进行重试!
启动监听器,监听动态配置修改
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 处理的具体执行方法。
如何使用配置idea
配置maven和runner
查看pom文件关系图
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格式数据返回
Get方法获取参数获取参数注解
@RequestBody :Json转Javabean对象
Controller实现增删改查
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命令导入
IDEA 新pull的文件模块不能用问题
(78条消息) 小记:idea中remove后的项目变灰色了,如何重新变回高亮_落笔云的博客-CSDN博客
注意:还有个问题
如果之前导入的包没成功,修改之后还爆红,可能是因为需要删除上边的包,重新倒一边就好了
2-6-密码加密与微服务鉴权JWT的反馈很重要,体会docker的作用
Springcould 注意版本对应,网上都有
负载均衡,默认一个一个服务平均,四个的话,调用四次就每个都来一遍,但顺序随机
SpringCloud微服务组件详情
熔断器
在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种 因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
网关
2.1 为什么需要微服务网关
不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口才 能完成一个业务需求。比如一个电影购票的收集APP,可能回调用电影分类微服务,用户微服务,支付微服务等。如果客户端直接和微服务进行通信,会存在一下问题:
# 客户端会多次请求不同微服务,增加客户端的复杂性
# 存在跨域请求,在一定场景下处理相对复杂
# 认证复杂,每一个服务都需要独立认证
相当于URL给你加前缀,然后注上要调用的serviceID
从Git上拿配置文件config
网关是注册中心的一个服务,当服务注册后,可以调用网关去分发,从而调用不同的服务形成管理。
RocketMQ安装细节
跨域问题:
f12控制台显示跨域,显示CORS规范,请求200,响应数据不返回数据。
网络响应显示无法加载数据,有200状态
处理
显示截图
Redis配置问题:
开放端口,修改配置文件conf,bind =0.0.0.0;开放端口可用,并且关闭保护模式
Mq问题
先开启nameserve,然后在开启broker。
先看后端数据是否返回正常,然后利用Redis可视化工具查看是否有key
打断点或者日志