分布式与微服务
文章平均质量分 76
分布式与微服务
vid。
出走半生,归来仍是少年;遍历山河,仍觉人间值得
展开
-
SpringBoot进行全局异常处理
使用@ExceptionHandler 加@ControllerAdvice 注解模拟异常发生@RestController@RequestMapping("/exception")public class ExceptionController { @RequestMapping("/show1") public String showInfo1() { String msg = null; msg.length(); // NullPointer原创 2022-04-08 14:14:42 · 196 阅读 · 0 评论 -
如何保障缓存一致性
前言如果只需要保存最终一致性是不需要这些策略的,因为redis里面我们一般会设置过期时间,这种方案下,只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存从而保证最终一致性。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。在这里,我们讨论三种更新策略:① 先更新数据库,再更新缓存;同时有请求A和请求B进行更新操作,那么会出现:1、线程A更新了数据库;2、线程B更新了数据库;3、线程B更新了缓存;4、线程A更新了缓存;5、线程C查询线程A中更新的脏数据② 先删除原创 2022-03-03 11:41:27 · 975 阅读 · 1 评论 -
订单秒杀案例
原创 2022-03-02 19:32:19 · 1055 阅读 · 0 评论 -
SpringCloud入门 (Hystrix、Rabbin、OpenFeign等)
简单的微服务未使用框架的微服务我们通过7071端口去调8081端口的服务8081/** * @author acoffee * @create 2022-01-19 17:24 */@RestController@RequestMapping("/user")public class UserController { @Autowired UserService userService; @RequestMapping("/findAll") publ原创 2022-01-22 10:53:00 · 856 阅读 · 0 评论 -
Elasticsearch基础
MySQL 数据库 表 行 列ES Index Type Document Filed Type ES6一个Index中只支持一个Type,ES7中不建议自定义TypeIndex操作#创建索引PUT test4#删除索引DELETE test4#查看所有索引GET _cat/indices#显示标题GET _cat/indices?v#查看单个索引信息GET test4#创建索引指定参数PUT test5{ "settings原创 2022-01-19 19:31:17 · 1898 阅读 · 0 评论 -
Elasticsearch安装
切换用户看到这个就没有问题后台启动并查看日志刷新配置node[root@localhost elasticsearch]# tar -xvf node-v12.22.0-linux-x64.tar.xzexport NODE_HOME=/opt/elasticsearch/node-v12.22.0-linux-x64export PATH=$PATH:${JAVA_HOME}/bin:${NODE_HOME}/bin刷新环境变量source /etc/profile.原创 2022-01-17 17:41:27 · 1440 阅读 · 0 评论 -
SpringBoot整合RabbitMQ
导入依赖 <!--springboot整合rabbitmq的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>一、简单整合我们这里在两个项目中完成一个生产者项目,一个消费者项目生产者配置文件原创 2022-01-12 18:53:00 · 1217 阅读 · 0 评论 -
RabbitMQ基础
什么是MQMQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息(A给B发送消息,A叫上游,B叫下游,A给B发送消息就叫叫上下游传递消息)。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。MQ的三大功能1.流量消峰举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰原创 2022-01-12 10:36:00 · 1244 阅读 · 0 评论 -
RabbitMQ安装
RabbitMQ安装-Linux安装包地址提取码:7777利用xftp将linux安装包传到linux因为我们的rabbitmq是erlang这个语言写的所以要安装erlang的环境按下图安装配置文件修改默认的账号和密码都是guest,只对本机开放,修改配文件,启用guest远程访问vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.16/ebin/rabbit.app没有默认登录界面,安装插件查看默认插件rabbitmq-plugins原创 2022-01-10 17:34:14 · 1077 阅读 · 0 评论 -
Springboot整合Redis
JedisSpringBoot项目模板(如果卡的话,可以更换模板)https://start.spring.iohttps://start.aliyun.com导入依赖 <!--Jedis依赖--> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>基本用法原创 2022-01-10 12:05:16 · 582 阅读 · 0 评论 -
redis主从复制及哨兵模式
互联网“三高”架构高并发高性能高可用为了避免单点Redis服务器故障 ,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起 ,并保证数据是同步的。即使有其中一台服务器宕机 ,其他服务器依然可以继续提供服务 ,实现Redis的高可用,同时实现数据冗余(褒义)备份。主从复制即将master中的数据即时、有效的复制到slave中特征: 一个master可以拥有多个slave ,一个slave只对应一个master职责mas原创 2022-01-08 14:29:06 · 1781 阅读 · 1 评论 -
redis分布式锁
分布式锁概述了解分布式锁之前,先要知道为什么要使用分布式锁,我们先了解下面的缓存异常缓存异常缓存穿透 是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,并且处于容错考虑,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决 空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。缓存雪崩原创 2022-01-06 20:09:43 · 615 阅读 · 0 评论 -
Session丢失
前言在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器。用户第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器,这时A服务器就会给用户创建一个Session。当用户第二次发送请求时,Nginx将其负载均衡到B服务器,而这时候B服务器并不存在Session,所以就会将用户踢到登录页面。这将大大降低用户体验度,导致用户的流失,这种情况是项目绝不应该出现的。模拟Session丢原创 2022-01-06 19:55:44 · 989 阅读 · 0 评论 -
Nginx入门
背景公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个原创 2021-12-09 20:25:28 · 1556 阅读 · 0 评论 -
Swagger
背景前后端分离前端 → 前端控制层、视图层后端 → 后端控制层、服务层、数据访问层前后端通过API进行交互前后端相对独立且松耦合产生的问题前后端集成,前端或者后端无法做到 “及时协商,尽早解决”,最终导致问题集中爆发解决方案首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险Swagger号称世界上最流行的API框架Restful Api 文档在线自动生成器 → API 文档 与API 定义同步更新直接运行,在线测试API支持多种语言 (如:Jav原创 2021-10-16 16:27:36 · 256 阅读 · 0 评论 -
任务(异步、邮件、定时)
异步任务模拟一个任务@Servicepublic class AsyncService { public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据正在等待执行...."); }原创 2021-10-18 20:56:49 · 91 阅读 · 0 评论 -
Shiro整合Mybatis
一、导入依赖<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</g原创 2021-09-24 12:11:51 · 203 阅读 · 0 评论 -
Shiro安全框架(SpringBoot整合Shiro)
搭建一个Shrio第一步:导入依赖 <dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.1</version> </de原创 2021-09-23 20:34:41 · 144 阅读 · 0 评论 -
初识SpringSecurity
SpringSecuritySpring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。初识SpringSecur原创 2021-09-15 21:30:28 · 178 阅读 · 0 评论 -
SpringBoot进行多表查询
实体类:Emp 类:@Data@NoArgsConstructor@AllArgsConstructorpublic class Emp { private int id; private String lastname; private String email; private int gender; private int did; private Dept dept; private Date birth = new Date();原创 2021-09-11 17:34:27 · 6588 阅读 · 2 评论 -
SpringBoot-MyBatis整合
整合MyBatisMyBatis-SpringBoot整合文档依赖 <!--mybatis和springboot的整合依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</ve原创 2021-08-14 17:41:00 · 96 阅读 · 0 评论 -
SpringBoot整合Druid
Druid简介Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源,我们来重点介绍 Spr原创 2021-08-14 15:08:26 · 95 阅读 · 0 评论 -
springboot整合JDBC使用
上周回顾SpringBoot是什么?微服务HelloWorld~ I探究源码自动装配原理配置yaml多文档环境切换静态资源映射Thymeleaf th:xxxSpringBoot如何扩展MVCjavaconfig如何修改SpringBoot的默认配置~CRUD国际化拦截器定制首页,错误页~这周JDBCMybatis :重点Druid :重点Shiro :安全:重点Spring Security :安全∶重点异步任务~,邮件发送,定时任务()SwaggerD原创 2021-08-14 11:38:32 · 135 阅读 · 0 评论 -
如何写一个网站
1、前端:有自己熟悉的模板,页面长什么样子:数据交互2、设计数据库(数据库设计难点!)3、前端让他能够自动运行,独立化工程4、数据库接口如何对接:json,对象 all in one5、前后端联调测试!一、有一套自己熟悉的后台模板:工作必要!x-admin二、前端页面:至少自己能够通过前端框架,组合出来一个网站页面indexaboutblogpostuser三、让这个网站能够独立运行!一个月!...原创 2021-08-08 21:27:19 · 369 阅读 · 0 评论 -
自定义配置以及Thymeleaf模板实现员工管理系统
我们这里就不在设计数据库,在类中设计模拟数据库即可。1.首页配置:1.注意点,在这里所有页面的静态资源都需要使用thymeleaf接管;2.url:@{}国际化1.我们需要配置i18n文件2.我们如果需要在项目中进行按钮自动切换,我们需要自定义一个组件LocaleResolver3.记得将自己写的组件配置到spring容器@Bean4.#{ }先创建文件,文件内的properties文件创建了上层文件会自动生成,国际化的源码可以看出可以设置的参数属性在Bundle中可以进行可视原创 2021-08-07 18:03:18 · 417 阅读 · 0 评论 -
thymeleaf异常
org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/commons/commons], template might not exist or might not be accessible by any of the configured Template Resolvers (template: “dashboard” - line 45, col 8)一直报错,我们定位到line 45, col 8原创 2021-08-06 18:06:45 · 183 阅读 · 0 评论 -
SpringBoot Web开发
自动装配springboot到底帮我们配置了什么?我们能不能进行修改?能修改那些东西?能不能扩展?xxxAutoConfigruation… 向容器中自动配置组件xxxProperties:自动配置类,装配配置文件中自定义一些内容要解决的问题:导入静态资源,…首页jsp、模板引擎Thymeleaf装配扩展springMvc增删改查拦截器国际化!静态资源探究public: 一般放公共资源static:一般放静态资源,图片这些resources:一般放acloud上传的原创 2021-08-04 16:38:43 · 164 阅读 · 1 评论 -
自动配置原理再理解
源码剖析:进行完上图的流程就完成了将自动配置类装配到Properties文件中@Conditional了解完自动装配的原理后,我们来关注一个细节问题,自动配置类必须在一定的条件下才能生效;@Conditional派生注解(Spring注解版原生的@Conditional作用)作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效;...原创 2021-08-02 14:35:47 · 103 阅读 · 0 评论 -
springboot配置文件
yaml语法SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的application.propertiesapplication.yaml语法结构 :key=value语法结构 :key:空格 value配置文件的作用 : 修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;yaml概述YAML是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。在开发的这种语原创 2021-07-31 15:52:12 · 181 阅读 · 0 评论 -
@Validated:数据校验时具体的注解报错(JSR303数据校验)
当我们想校验用户名是不是邮箱格式时导入了@Validated注解没报红,但是当我们在用户名上输入@Email确报红了我们的maven依赖也是导入了的 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <原创 2021-07-31 12:55:16 · 549 阅读 · 1 评论 -
再看自动装配原理
自动配置:pom.xmlspring-boot-dependencies:核心依赖在父工程(spring-boot-starter-parent)中我们在写或者引入一些Springboot引入依赖的时候,不需要指定版本,就因为有这些版本仓库启动器启动器: 就是springboot 的启动场景,比如spring-boot-starter-web 它会帮我们自动导入web环境的所有依赖。springboot会将所有的场景变成一个个的启动器。 <dependency> <原创 2021-07-30 10:28:30 · 107 阅读 · 0 评论 -
SpringBoot
SpringBoot概述Spring是如何简化Java开发的为了降低Java开发的复杂性,Spring采用了以下4种关键策略:1、基于POJO的轻量级和最小侵入性编程,所有东西都是bean;2、通过IOC,依赖注入(DI)和面向接口实现松耦合;3、基于切面(AOP)和惯例进行声明式编程;4、通过切面和模版减少样式代码,RedisTemplate,xxxTemplate;Spring Boot的主要优点1、为所有Spring开发者更快的入门2、开箱即用,提供各种默认配置来简化项目配置原创 2021-07-10 10:28:30 · 76 阅读 · 0 评论