Result包装
Result包装
Result.java
12345678910111213141516171819202122232425262728293031323334353637package online.orange.blog.common.base;import lombok.Data;import online.orange.blog.common.constants.ResponseCode;@Datapublic class Result<T> { private String code; private String msg; private T data; public static <T> Result<T> success(T data) { Result<T> result = new Result<>(); result.setCode(ResponseCode.SUCCESS); result.setMsg("s ...
Sentinel
Sentinel
服务雪崩
概述:在微服务系统架构中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。一个服务的不可用导致整个系统的不可用的现象就被称之为雪崩效应。
如下图所示:
解决方案
超时处理
超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
隔离处理
隔离处理:将错误隔离在可控的范围之内,不要让其影响到其他的程序的运行。
熔断处理
熔断处理:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
流量控制
流量控制:限制业务访问的QPS(每秒的请求数),避免服务因流量的突增而故障。
整合sentinel
我们在spzx-cloud-user中整合sentinel,并连接sentinel的控制台,步骤如下:
1、引入sentinel依赖
12345<!--sentinel--><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-star ...
ShardingSphere
高性能架构模式
性能数据库集群的方式是:
读写分离
数据库分片
读写分离架构
读写分离原理: 读写分离的基本原理是将数据库读写操作分散到不同的节点上,下面是其基本架构图:
读写分离的基本实现:
主库负责处理事务性的增删改操作,从库负责处理查询操作,能够有效的避免由数据更新导致的行锁,使得整个系统的查询性能得到极大的改善。
读写分离是根据 SQL 语义的分析,将读操作和写操作分别路由至主库与从库。
通过一主多从的配置方式,可以将查询请求均匀的分散到多个数据副本,能够进一步的提升系统的处理能力。
使用多主多从的方式,不但能够提升系统的吞吐量,还能够提升系统的可用性,可以达到在任何一个数据库宕机,甚至磁盘物理损坏的情况下仍然不影响系统的正常运行。
CAP 理论
CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer’s theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。
在一个分布式系统中,当涉及 ...
Spring Boot 项目启动时自动执行的方法
Spring Boot 项目启动时自动执行的方法
在实际项目开发中,有时需要在项目启动时执行特定的方法,比如提前加载数据到缓存、检查运行环境、检查授权信息等。以下是八种实现方式,按照执行顺序介绍。
1. 实现 ServletContextListener 接口
通过实现 ServletContextListener 接口的 contextInitialized 方法,可以在 Web 应用程序初始化之前执行代码。
123456789101112131415161718import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;@Slf4j@Componentpublic class ServletContextListenerImpl implements ServletContextListener { ...
Spring Clould
系统架构演进
单体架构
单体架构具有以下优点:
1、简单:单体架构模式相对于其他复杂的架构来说,其结构简单易用,便于新手学习和应用。
2、易于维护:由于整个应用程序都在一个代码库中,因此很容易对其进行维护和更新。
3、易于部署:单个可执行文件可以在任何支持运行该语言的环境中运行,并且部署也相对轻松。
然而,单体架构也存在一些缺点:
1、扩展性差:单体应用程序所有功能都在一个程序中实现,因此扩展功能时需要新增或修改源代码,并重新部署整个应用程序,这可能会导致系统不稳定和长时间停机。
2、可靠性低:由于单体应用程序集成了所有的逻辑和组件,因此如果其中有一个非常重要的组件出现故障,则可能导致从整个系统崩溃。
3、风险高:单体应用程序中的错误往往比较难以调试,因为代码复杂度高且耦合度强。 综上所述,单体架构适用于小型、简单的软件系统,但是对于大型、复杂的系统来说,单体架构面临诸多挑战,需要采用其他更加灵活和可扩展的架构模式。
分布式架构
分布式系统架构是指将一个软件系统分割成多个独立的服务,并且这些服务可以在不同的计算机或服务器上运行,并通过网络进行通信。
微服务系统架构:本质上也属于分布式系 ...
Spring Framework
Spring Framework简介
1. Spring 和 SpringFramework
https://spring.io/projects
广义的 Spring:Spring 技术栈(全家桶)
广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。
经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。
这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。
狭义的 Spring:Spring Framework
狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
Spring 框架是一个分层的、面向切 ...
Spring MVC
Spring MVC
Spring MVC是控制层框架
表述层:控制层和视图ui
服务层
持久化层
基于Servelet API构建的原始Web框架
使用spring MVC 步骤
配置前端控制器
12345678910111213141516171819202122232425262728293031323334353637383940 <servlet> <servlet-name>DispatcherServlet</servlet-name> <!-- DispatcherServlet的全类名 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <!--默认Spring MVC的配置文件配置 位置:WEB-INFO下 名称:DispatcherServlet的name-servelet. --> <!-- 通过初始化参数 ...
canal的使用
canal的使用
由于canal的starter只支持spring 2.x
建议重新建个模块
1.依赖
12345678910<dependency> <groupId>top.javatool</groupId> <artifactId>canal-spring-boot-starter</artifactId> <version>1.2.1-RELEASE</version></dependency><dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version></dependency>
2.配置文件
123456server: port: 7080#canal配置canal: destination: tingshuTop ...
find_in_set
find_in_set可以查询以逗号分隔中是否存在某一个数据
123select count(*) from sys_template where read_user_id is null or not find_in_set(#{id},read_user_id)
git命令
git命令
撤销已提交的更改
在 Git 中,还原提交(撤销已提交的更改)有几种不同的方法,具体取决于你想达到的效果:
1. 撤销提交但保留更改(回到工作区)
1git reset --soft HEAD~1
效果:撤销最后一次提交,但保留所有更改在 暂存区(git add 状态)
适用场景:想重新修改提交信息或拆分提交
2. 撤销提交并取消暂存(更改保留在工作目录)
123git reset HEAD~1# 或等价于git reset --mixed HEAD~1 # --mixed 是默认选项
效果:撤销提交,并将更改移出暂存区(需重新 git add)
适用场景:想重新选择部分文件提交
3. 彻底丢弃提交和所有更改(慎用!)
1git reset --hard HEAD~1
效果:彻底丢弃最后一次提交 和所有工作目录的更改(不可逆!)
适用场景:完全放弃最近的提交
4. 撤销特定提交(生成反向提交)
1git revert <commit-hash>
效果:生成一个新的提交来抵消指定提交的更改(保留提交历史)
适用场景:需要撤销公共仓库的提交( ...
