自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(240)
  • 收藏
  • 关注

原创 使用DefaultGroupSequenceProvider实现多字段联合校验

背景一个beanA大概下面这样,需要根据字段a做查询逻辑,得到的值来判断是否需要对后面的字段进行校验@Data@Builder@NoArgsConstructor@AllArgsConstructorpublic class BeanA{ private String a; private String b; private String c; private String d;}首先我用正常的validator方式先对这个bean进行

2022-02-17 22:29:59 2163

原创 Kafka--概述

1.什么是KafkaKafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。(1)消息系统消息系统负责将数据从一个应用程序传输到另外一个应用程序,使程序之间解耦可以专注于自己的功能。消息系统有两种消息传递模式:一种是点对点(消息队列),另一种是基于发布-订阅模式。(2)流处理平台Kafka 不仅能够与大多数流式计算框架完美整合,并且自身也提供了一个完整的流式处理库,即kafka Streaming。(3)存储系统Kafka的消息持久

2021-08-05 23:28:28 782 2

原创 java.lang.UnsupportedOperationException异常解决

问题描述String s = "aaa";List<String> list = Splitter.on(":").splitToList(s);list.add("bbb");使用Splitter.on("????.splitToList(s)返回的list不能进行add操作,否则会抛java.lang.UnsupportedOperationException异常问题原因查看源码可以看出使用Splitter.on("????.splitToList(s)返回的list是不可变集

2021-01-28 14:01:52 449 1

原创 Spring消除if-else保证业务开闭原则

问题描述在编写业务逻辑时,经常会遇到需要多重if-else判断,并且如果需要增加业务逻辑时需要修改代码,违背了开闭原则,形式如下String type = "...";if(type.equal("A")){ String s = method(i,j);}else if(type.equal("B")){ String s = method(j,k);}else if(type.equal("C")){ String s = method(i,k);}//随着业务的拓展可能还会出现DE

2021-01-15 17:50:32 344 2

原创 Java将JSON字符串与自定义对象之间的转化

Java将自定义对象转化为JSON字符串JsonUtil.toJson(A);Java将JSON字符串转化为自定义对象InputStream in = req.getInputStream();String json = Streams.asString(in);A a = JsonUtil.of(json, A.class);

2021-01-07 14:01:27 505

原创 Apache Jackrabbit简介及入门

文章目录1.什么是JCR1.1 JCR 是什么1.2 JCR的内容仓库模型2.什么是Jackrabbit3.使用Jackrabbit3.1 配置Jackrabbit环境3.2使用Jackrabbit1.什么是JCR1.1 JCR 是什么 Java Content Repository API(JSR-170)试图建立一套标准的API去访问内容仓库。内容仓库可以理解为一个用来存储文本和二进制数据(图片,word文档,PDF等等)的数据存储应用程序。 你不用关心你真正的数据到底存储在什么地方,是关系数

2020-12-25 17:02:48 5395 4

原创 Lombok常用注解

@Data:在JavaBean中使用,注解包含包含getter、setter、NoArgsConstructor注解@AllArgsConstructor:在JavaBean中使用,注解会生成对应的有参构造方法@ToString:在JavaBean中使用,注解会自动重写对应的toStirng方法@Slf4j:在需要打印日志的类中使用,项目中使用slf4j日志框架@Log4j:在需要打印日志的类中使用,项目中使用log4j日志框架@Builder:构造者模式@Value..

2020-12-24 15:50:56 260 1

原创 Java--反射基础

文章目录1.反射概述1.1 反射概念1.2 反射原理2.获取Class对象的方法3.使用Class对象3.1 成员变量 :Field(1)Class对象获取Field(2)Field的使用3.2 构造器 : Constructor(1)Class对象获取Constructor(2)Constructor的使用3.3 方法 : Method(1)Class对象获取Method(2)Method的使用1.反射概述1.1 反射概念对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够

2020-12-23 19:19:55 93

原创 Spring使用redisTemplate如何使用序列化器同时可以兼容String和Integer

问题描述接上次的问题Java将Integer的值存入Redis失败问题上次解决了使用redis可以存储Integer类型的数据,但是局限在于序列化器为Integer的序列化器,只能存储Integer类型,这对后续使用redis存储是不能接受的。此次问题:开发中需要存储String类型的数据,如何才能使用序列化器,做到同时可以存储String和Integer类型问题原因序列化器使用的是自定义的Integer序列化器问题解决设想:1.查看是否可以同时使用两个序列化器(x)2.是否可以定义一个序

2020-12-22 13:43:31 977

原创 TimeUnit时间工具类

文章目录1.时间颗粒度转换1.1 常用时间颗粒度1.2 时间颗粒度转换2.延时TimeUnit是java.util.concurrent包下面的类1.时间颗粒度转换1.1 常用时间颗粒度TimeUnit.DAYS //天 TimeUnit.HOURS //小时 TimeUnit.MINUTES //分钟 TimeUnit.SECONDS //秒 TimeUnit.MILLISECONDS //毫秒 TimeUnit.NAN

2020-12-21 13:45:25 512

原创 Guava--字符串处理

文章目录1.连接器[Joiner]2.拆分器[Splitter]1.连接器[Joiner]String join = Joiner.on(",").join(list);//拓展:过滤掉空的参数skipNulls()//拓展:以参数替换空的参数useForNull("no value")注意:joiner实例总是不可变的。用来定义joiner目标语义的配置方法总会返回一个新的joiner实例。这使得joiner实例都是线程安全的,你可以将其定义为static final常量。2.拆分器

2020-12-15 19:11:38 447

原创 Guava--集合

文章目录1.不可变集合2.Guava集合2.1 Multiset2.2 Multimap2.3 BiMap2.4 Table2.5 RangeSet2.6 RangeMap1.不可变集合 Guava为所有JDK标准集合类型和Guava新集合类型都提供了简单易用的不可变版本优点:当对象被不可信的库调用时,不可变形式是安全的;不可变对象被多个线程调用时,不存在竞态条件问题不可变集合不需要考虑变化,因此可以节省时间和空间。所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节);不可

2020-12-15 17:33:02 1288

原创 Spring将Integer的值存入Redis失败问题

问题描述Spring整合redis使用 RedisTemplate<String, String> redisTemplate,对其进行set操作时,如果k:v类型是String:Integer类型,会抛异常(Integer不能转换为String)。即使改为RedisTemplate<String, Intege> 也会报错。问题原因配置时,对象序列化器使用的是<property name="valueSerializer"> <bean clas

2020-12-15 15:33:22 1315

原创 Guava--基本工具

1、Optional–使用和避免null Guava用Optional表示可能为null的T类型引用。eg:Optional<Integer> possible = Optional.of(5);1.1创建Optional//1.创建指定引用的Optional实例,若引用为null则快速失败Optional.of(T);//2.创建引用缺失的Optional实例Optional.absent();//3.创建指定引用的Optional实例,若引用为null则表示缺失Op

2020-12-07 19:16:04 331

原创 Java8--Stream

Stream简介Stream与Collection集合的区别:Collection是一种静态的内存数据结构,而Stream是有关计算的。Stream不会存储元素Stream不会改变原对象,而会返回一个持有结果的新StreamStream操作是延迟执行的,这意味他们会等到需要结果才执行Stream的创建List<String> s = Arrays.asList("a", "b", "c");//stream() − 为集合创建串行流。Stream<String>

2020-12-04 11:45:12 128

原创 Git日常操作

查看分支#查看本地分支git branch#查看远程分支git branch -r#查看全部分支git branch -a#创建并切换到分支namegit checkout -b name#将本地的name1分支推送到远程主机origin上的对应name2分支git push origin name1:name2#把工作时的所有变化提交到暂存区,包括文件内容修改以及新文件,但不包括被删除的文件。git add .#添加备注信息git commit -m '备注'#

2020-12-04 10:56:09 104

原创 Java8--Lambda表达式

文章目录Lambda表达式的格式Lambda表达式的使用Lambda表达式特征方法引用函数式接口Lambda表达式的格式(parameters) ->{ statements; };/** *格式: * ->:lambda操作符 * ->左边:lambda形参列表 * ->右边:lambda体(方法体) */Lambda表达式的使用//情况1: 无参,无返回值Runnable r = ()->{ System.out.println(

2020-12-03 16:10:33 102

原创 Linux常用命令

文章目录辅助命令文件目录和权限文件查找文本查找归档和压缩其他辅助命令type #显示命令的类型which #显示可执行程序的位置man #命令的帮助文档help #显示命令的使用信息whatis #命令的简介文件目录和权限mkdir #创建目录cp #复制文件或者目录mv #移动文件或者重命名‘rm #删除文件或者目录chmod #修改文件属性chown #修改文件所属者或用户组chgrp #修改文件用户组

2020-12-03 11:31:19 81

原创 浅谈字符串的拼接

文章目录浅谈字符串的拼接1、JVM中常量池的存放2、字符串的声明3、String4、StringBuilder5、StringBuffer6、StringJoiner浅谈字符串的拼接1、JVM中常量池的存放​    在谈字符串拼接之前,我们首先了解一下字符串常量池 Java7之前,常量池是存放在方法区中的。 Java7,常量池存放到了堆中。 Java8之后,运行时常量池和静态常量池存放在元空间中,而字符串常量池存放在堆中。2、字符串的声明 String s = "hello"; //直

2020-09-13 10:39:46 258

原创 分库分表ShardingSphere

文章目录0、问题及解决1、ShardingSphere2、分库分表3、读写分离(主从复制)3.1介绍3.2配置主从复制4、Sharding-JDBC4.1 简介4.2 环境搭建4.3 简单测试(1)水平分表(2)水平分库(3)垂直分库(4)操作公共表(5)主从分离5、Sharding-Proxy5.1简介5.2 安装与配置(1)安装(2)启动(3)配置(4)分库配置(5)读写分离配置【笔记于学习尚硅谷课程所作】0、问题及解决分库分表后如何查询: sharding column + ES + HBa

2020-08-03 18:26:04 1660

原创 服务链路追踪

文章目录1、基本术语2、整合 Sleuth3、整合 Zipkin【笔记于学习尚硅谷课程所作】1、基本术语Span (跨度) :基本工作单元,发送一个远程调度任务就会产生一个Span, Span 是一个64位ID唯一标识的,Trace 是用另一个64位ID唯一标识的,Span 还有其他数据信息,比如摘要、时间戳事件、Span的ID、以及进度ID.Trace (跟踪):一系列Span组成的一个树状结构。请求一个微服务系统的API接口,这个API接口,需要调用多个微服务,调用每个微服务都会产生一个新

2020-06-11 17:28:40 245

原创 Springboot整合Sentinel

文章目录1、 高并发方法论&简介2、 Sentinel整合【笔记于学习尚硅谷课程所作】1、 高并发方法论&简介熔断:A服务调用B服务的某个功能,由于网络不稳定问题,或者B服务卡机,导致功能时间超长。如果这样子的次数太多。我们就可以直接将B断路了(A不再请求B接口),凡是调用B的直接返回降级数据,不必等待B的超长执行。这样 B的故障问题,就不会级联影响到A。降级:整个网站处于流量高峰期,服务器压力剧增,根据当前业务情祝及流量,对一些服务和页面进行有策略的降级(停止服务,所有的调用

2020-06-11 17:27:48 1362 1

原创 分布式事务

文章目录1、本地事务复习1.1 ACID1.2 隔离级别1.3 并发事务带来的问题1.4 传播行为1.5 Springboot事务失效问题2、分布式事务2.1 CAP定理2.2BASE理论2.3 分布式事务的几种方案(1) 2PC(了解)(2) 柔性事务-TCC事务补偿型方案(3)柔性事务-最大努力通知型方案(4)柔性事务-可靠消息+最终一致性方案 (异步确保型)3、 Seata3.1 Seata术语3.2环境搭建【笔记于学习尚硅谷课程所作】1、本地事务复习1.1 ACID原子性(Atomic

2020-06-11 17:26:44 215

原创 接口幂等性

文章目录1、接口幂等性2、幂等解决方案2.1 token机制(令牌)2.2 各种锁机制2.3 各种唯一约束2.4 防重表2.5 全局请求唯一id【笔记于学习尚硅谷课程所作】1、接口幂等性​ 接口幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。需要防止的情况:用户多次点击按钮用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败。feign 触发重试机制2、幂等解决方案2.1 token机制(令牌)服务端提供了发送toke

2020-06-11 17:24:23 220

原创 Feign丢失请求头问题

文章目录1、Feign远程调用丢失请求头问题2、Feign异步调用丢失请求头问题【笔记于学习尚硅谷课程所作】1、Feign远程调用丢失请求头问题解决:增加拦截器@Configurationpublic class GuliFeignConfig { /** * 解决fein远程调用丢失请求头 * @return */ @Bean("requestInterceptor") public RequestInterceptor reque

2020-06-06 20:33:09 1771

原创 Springboot整合RabbitMQ

文章目录1、RabbitMQ简介2、RabbitMQ的安装3、Springboot整合【笔记于学习尚硅谷课程所作】1、RabbitMQ简介如果还没有了解过MQ的可以参考RabbitMQ是一 个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。核心概念:Message:消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组这些属性包括outing-key (路由键)、priority (相对于其他消息的

2020-06-06 20:31:37 200

原创 微服务之间的Session共享问题

文章目录1、Session共享(1)hash一致性(2)统一存储(3)子域session共享2、 SpringSession整合【笔记于学习尚硅谷课程所作】1、Session共享问题:同一个服务,复制多份,session不同步问题不同服务,session不能共享问题(1)hash一致性优点:只需要改nginx配置,不需要修改应用代码负载均衡,只要hash属性的值分布是均匀的,多台web-server的负载是均衡的可以支持web-server水平扩展(session同步法是不行

2020-06-06 20:30:04 2783

原创 OAuth2.0认证中心的使用

文章目录1、OAuth2.0简介2、去微博申请认证权限3、使用社交登录【笔记于学习尚硅谷课程所作】1、OAuth2.0简介​ OAuth (开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。2、去微博申请认证权限1.去微博的开放平台,登录并进入微连接–>网站接入–>立即接入2.创建新应用(没完善信息的先完善信息)3.完善回调页信息4.接下来使用的步骤引导需要授权的

2020-06-06 20:26:55 798

原创 Springboot--内置的MD5加盐加密

文章目录【笔记于学习尚硅谷课程所作】MD5Message Digest algorithm 5,信息摘要算法压缩性:任意长度的数据,算出的MD5值长度都是固定的。容易计算:从原数据计算出MD5值很容易。抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。不可逆 (加盐)通过生成随机数与MD5生成字符串进行组合数据库同时存储MD5值与salt值。验证正确性时使用salt进行M

2020-06-06 20:24:43 4558 2

原创 第三方服务--短信接口

文章目录【笔记于学习尚硅谷课程所作】1、购买接口:在阿里云购买免费体验的短信接口2.查看接口使用方法3.测试4.后端测试(1)加入工具类HttpUtilspackage com.hanhan.gulimall.thirdparty.utils;import org.apache.commons.lang.StringUtils;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;

2020-06-06 20:23:25 1172 1

原创 CompletableFuture 异步编排

文章目录3、 CompletableFuture 异步编排3.1 创建异步对象3.2 获取值3.3 计算结果完成时的处理3.4 handle方法3.5线程串行化3.6 两任务组合--都完成3.7 两任务组合--一个完成3.8 多任务组合【笔记于学习尚硅谷课程所作】3、 CompletableFuture 异步编排3.1 创建异步对象以下四个静态方法用来为一段异步执行的代码创建CompletableFuture对象//使用ForkJoinPool.commonPool()作为它的线程池执行异步代

2020-05-31 20:39:03 548

原创 线程池简介

文章目录1、初始化线程的方法2、线程池2.1参数2.2 线程池运行流程2.3 初始化方式2.4 Executors常用四种线程池2.5 线程池优点【笔记于学习尚硅谷课程所作】1、初始化线程的方法继承Thread实现Runnable接口实现Callable接口 + FutureTask (可以拿到返回结果,可以处理异常)线程池// 1、继承Thread public static class Thread01 extends Thread{ @Override

2020-05-31 20:36:06 93

原创 Object分类

文章目录3.3Object分类【笔记于学习尚硅谷课程所作】3.3Object分类PO持久对象:PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。DO领域对象:就是从现实世界中抽象出来的有形或无形的业务实体。TO数据传输对象:不同的应用程序之间传输的对象DTO数据传输对象:泛指用于展示层与服务层之间的数据传输对象。VO值对象:接受页面传递来的数据,封装对象;将业务处理完成的对象,封装成页面要用的数据BO业务对象:从业务模型的角度看,见U

2020-05-30 21:55:50 225

原创 JSR303校验简介

文章目录2.2 JSR303校验(1)简单使用(2)统一异常处理(3)分组校验(4)自定义校验【笔记于学习尚硅谷课程所作】2.2 JSR303校验(1)简单使用1.在Entity中,给Bean添加校验注解,并定义自己的message提示2.在Controller中,开启校验功能@Valid3.在Controller中,给校验的Bean后面加BindindRest参数,可以获取到校验的结果信息(2)统一异常处理1.编写异常处理类,使用@ControllerAdvice2.使用@Excep

2020-05-30 21:55:14 281

原创 跨域问题解决

文章目录1.2 跨域问题【笔记于学习尚硅谷课程所作】1.2 跨域问题​ 跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是 浏览器对javascript施加的安全限制​ 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域解决:1.使用nginx部署为同一域2.配置当次请求允许跨域 (添加响应头)选择2@Configurationpublic class GulimallCorsConfigguration { @Bean p

2020-05-30 21:50:07 273

原创 网关Gateway简介

文章目录4.网关Gateway4.1介绍4.2 创建API网关项目【笔记于学习尚硅谷课程所作】4.网关Gateway​  网关作为流量的入口,常用功能包括路由转发、权限校验、限流控制等。而springcloud gateway作为SpringCloud官方推出的第二代网关框架,取代了Zuul网关。4.1介绍​ 当我们请求到达网关,网关利用断言来判定这次的请求是否符合某个路由规则,如果符合了就按这个路由规则路由到指定地方。在路由过程中要经过指定Filter进行过滤4.2 创建API网关项目

2020-05-30 21:46:19 3131

原创 Nacos安装与配置

文章目录1、简介2、Nacos2.1下载2.2 注册中心2.3 配置中心2.4配置中心细节3、远程调用Feign【笔记于学习尚硅谷课程所作】1、简介​ ​  Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。​  依托Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将Spring Cloud应用接入阿里微服务解

2020-05-30 21:44:41 11445

原创 Springboot--整合Mybatis-Plus

文章目录4、整合Mybatis-plus【笔记于学习尚硅谷课程所作】4、整合Mybatis-plus导入依赖(上面做过了) <!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId>

2020-05-30 21:40:45 129

原创 Docker上配置数据库

文章目录1、安装虚拟机VMware2、安装Liunx系统3、安装Docker4、安装MySQL5、安装Redis【笔记于学习尚硅谷课程所作】1、安装虚拟机VMware 参考https://blog.csdn.net/dulei17816/article/details/81940582 安装后,VM界面可能出现英文的状况,解决如下:&emsp;在win10系统设置里点击“时间和语言”,然后选择“区域”,把区域格式改成中国2、安装Liunx系统(1)安装Centos8 参考ht

2020-05-30 21:37:55 877 1

原创 分布式基础概念

文章目录2、分布式基础概念2.1 微服务2.2 集群&分布式&节点2.3 远程调用2.4 负载均衡2.5 服务注册/发现&注册中心2.6 配置中心2.7 服务熔断&服务降级2.8 API网关【笔记于学习尚硅谷课程所作】2、分布式基础概念2.1 微服务​  微服务架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API。这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署。这些服务使用

2020-05-30 21:34:09 579

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除