- 博客(39)
- 收藏
- 关注
原创 http改为https后websocket连接不上
其中,proxy_set_header userId $arg_userId;表示从请求 URL 的 query string 中获取 userId 参数的值,并将其作为自定义头信息 userId 发送到后端 WebSocket 服务。如果请求的 URL 中没有 userId 参数,则 $arg_userId 的值为空。当请求的 URL 匹配到 /ws 路径时,将会被代理到 WebSocket 服务。
2023-05-11 18:15:32 599
原创 关于Stream API优化 Java 代码
Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读放大招,流如何简化代码如果有一个需求,需要对数据库查询到的菜肴进行一个处理:筛选出卡路里小于400的菜肴对筛选出的菜肴进行一个排序获取排序后菜肴的名字菜肴:Dish.javapublic class Dish { private String name; private boolean vegetarian;
2021-11-15 13:37:32 277 4
原创 feign接口调用服务上传图片 报错 the request was rejected because no multipart boundary was found
在用postman 请求这个调用接口的时候,报了the request was rejected because no multipart boundary was found1.首先检查是否导入了下面两个包<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <
2021-10-27 09:27:32 632 1
原创 CompletableFuture异步编程
1.什么是CompletableFuture很多场景下,我们想去获取线程运行的结果,而通常使用execute方法去提交任务是无法获得结果的,这时候我们常常会改用submit方法去提交,以便获得线程运行的结果。而submit方法返回的就是Future,一个未来对象。 使用future.get() 方法去获取线程执行结果,包括如果出现异常,也会随get方法抛出。当我们使用future.get()方法去取得线程执行结果时,要知道get方法是阻塞的,也就是说为了拿到结果,当主线程执行到get()方法,当前线程
2021-08-06 14:32:45 457 3
原创 Java常用工具库
1. Java自带工具方法1.1 List集合拼接成以逗号分隔的字符串// 如何把list集合拼接成以逗号分隔的字符串 a,b,c List<String> list = Arrays.asList("a", "b", "c"); // 第一种方法,可以用stream流 String join = list.stream().collect(Collectors.joining(",")); System.out.println(join); // 输出 a,b,c //
2021-06-29 11:40:01 219
原创 Json和对象直接互相快捷转换不用工具类!!!!
1、添加jackson依赖库<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.3</version></dependency>用到jackson的类中需要引入:import com.fasterxml.jackson.d
2021-06-17 15:34:20 166
原创 业务逻辑层到底该抛异常还是返回错误的状态码
对比:抛出异常可以让API层try catch 捕获异常,并且在发生问题时候,迅速定位到某行代码,异常链占用内存大,返回错误码,可以让API解析错误码,做某些操作,但是不利于定位服务端代码错误。应用场景:1)参数校验 ,校验参数必须存在,这种直接抛出异常就可以了,因为不需要返回其他数据,参数校验通过了,根据订单ID 获取订单信息 没找到, 也直接抛异常就可以了, 因为也不需要返回其他数据。2)创建订单 校验是否存在未支付订单,如果API 层要求 如果存在未支付订单,同时返回未支付订单号,方便 A
2021-05-17 15:37:19 2252
原创 ClassLoader加载机制与双亲委派
1.Classloader1.1 JVM一共有四种类加载器:Bootstrap类加载器、Extension类加载器、Application类加载器和Custom类加载器。需要注意的是,它们之间并非继承关系,只是在语义上,顶层类加载器为底层类加载器的父加载器。1.2 Bootstrap类加载器是JVM中最顶层的类加载器,由C++实现,其他三种类加载器是ClassLoader的子类。不同的类加载器,会加载不同的类。Bootstrap类加载器加载的是jre/lib/rt.jar中所有的类。1.3 Ext
2021-04-28 17:25:50 127
原创 关于反射的实战应用对比
测试类package com.longxin.springbootvue.system.admin.controller;import com.longxin.springbootvue.system.admin.domain.vo.BusiTrashAirVo;import java.lang.reflect.Field;/** * @ClassName: aaa * @Author: ld * @Date: 2021/3/10 15:20 * @Description: **/
2021-03-10 16:05:41 97
原创 关于java正则表达式那点事...
一、正则表达式匹配规则\w 匹配字母、数字、下划线\W 匹配非字母、数字、下划线\s 匹配任意空白字符,相当于[\t\n\r\f]\S 匹配任意非空字符\d 匹配任意数字,相当于[0-9]\D 匹配非数字的字符\A 匹配字符串开头\Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串\z 匹配字符串结尾,如果存在换行,同时还会匹配换行符\G 匹配最后匹配完成的位置\n 匹配一个换行符\t 匹配一个制表符
2020-12-08 15:27:56 88
原创 springboot的切面aop实现日志记录的插入。简单操作,易上手!
1.导包<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>2.创建项目工程1.启动类@SpringBootApplicationpublic class OpenApplication { public sta
2020-10-30 18:14:35 508
原创 Redis的使用(二)
1、发布订阅模式例子:比如说你们家有个收音机 你收听了 xxxxx 频道 那么只要你打开这个频道 你就能收听到这个频道的所有的内容你的收音机-----------接收方(订阅方)频道的内容发送方-------内容的发布者subscribe 订阅的频道的名称publish 频道名字 内容2、Redis中事务问题事务是不是具有原子性? 这一串的操作要么同时成功、要么同时失败不是这样的(没啥用)multi 开启事务..........exec 提交事务3、rdb模式实现
2020-10-29 10:16:07 117
原创 Redis的使用(一)
1、Redis是什么Redis是一个no sql的数据库Redis是一个基于键值对的存储系统 key value Map结构no sql 的数据库(非关系型的数据库)非关系型数据库-----------------关系型的数据库关系:表与表之间的关系 对象和表之间的映射关系非关系型数据库:不存在表与表之间的关系 也不存在 对象和表之间的关系在Redis中简单的说 啥都没有 所有数据 都是基于键值对来进行存储的2、redis能干什么1、做数据缓存(缓存)2、购物车
2020-10-29 09:54:07 246
原创 shiro授权和认证(四)
SpringBoot+shiro+Swagger实现前后分离的框架1、导包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>
2020-10-28 10:20:55 259
原创 shiro授权和认证(三)
1、过滤器授权1、在realm中查询用户的权限和角色放到缓存中 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { //第一步:先获取用户名 User user= (User) principalCollection.getPrimaryPrincipal(); //第二步:通过用户名查询数据库
2020-10-28 10:07:44 1145
原创 shiro授权和认证(二)
1、盐散列次数以及散列关系 public static void main(String[] args){// Md5Hash md5Hash = new Md5Hash("abc");//// System.out.println("散列后的结果:"+md5Hash); //为什么要加盐? 给这个密码再添加一层保障 //为了让密码更加安全 更加不容易被破解 Md5Hash md5Hash1 = ne
2020-10-28 10:02:01 285
原创 shiro授权和认证(一)
shiro是什么shiro一个授权和认证的这样一个框架简单的给你说、就是以前咋们认证和授权的所有代码、shiro都给咋们写好了、而且封装好了、我们只需要按照这个框架提供的API来简单的集成到咋们的项目中就可以了1、shiro能干什么认证、授权、Cache的管理、Session的管理、rememberMe功能的实现、登陆、退出…2、shiro的整体架构是什么3、shiro的第一个helloworld程序3.1、导包 <!--导入shiro的包--> <de
2020-10-28 09:43:40 511
原创 一篇文章带你学会docker
一. Docker介绍.1. 引言.我本地运行没问题啊.环境不一致的问题. -> Docker哪个哥们又写了死循环,怎么这么卡.多用使用操作系统相互影响. -> Docker天猫,淘宝在双11的时候,用户量是暴增.运维成本多高. -> Docker可以实现弹性伸缩,快速扩展服务器.学习一门技术时,安装的成本太高了.安装软件成本多高. -> Docker可以快速的安装软件.2. Docker概述.一帮年轻人,开了一家公司,从2010年的时候开始
2020-09-24 16:00:06 1055 1
原创 springboot整合quartz实现定时任务调度管理的用例
Quartz是一款开源的定时任务调度框架,本文主要记录一下在工作中使用springboot整合quartz实现定时任务调度管理的用例。内容主要有:springboot整合quartz相关配置、实现基于simpleTrigger的定时任务、实现基于cronTrigger的定时任务。Quartz官网:http://www.quartz-scheduler.org/1.导入依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h
2020-09-24 15:04:35 219
原创 mybatis-plus的service层业务逻辑和Wrapper 条件构造器
1.service层业务逻辑处理IService使用service层需要继承IService,当然实现层也要继承对应的实现类。public interface UserService extends IService<User> {}@Servicepublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }getOne(),这个是方法
2020-09-17 10:24:44 3818
原创 Hibernate-invalidator的详细使用
Hibernate-invalidator的使用2、对象参数的校验2.1、定义对象@Data@AllArgsConstructor@NoArgsConstructorpublic class User { private int id; @NotNull(message = "用户名不能为空") @Length(min = 6,max = 10,message = "用户名长度不对") private String userName; @NotNull(m
2020-09-17 09:48:43 144
转载 Stream的详细操作
关于Stream流的详细操作转载自https://blog.csdn.net/zzti_erlie/article/details/108269268
2020-09-16 11:40:42 383
原创 详解JDK1.8之Lambda表达式
Lambda表达式一、Lambda表达式简介什么是Lambda?Lambda是JAVA 8添加的新特性,说白了,Lambda是一个匿名函数为什么使用Lambda使用Lambda表达式可以对一个接口的方法进行非常简洁的实现Lambda对接口的要求虽然可以使用Lambda表达式对某些接口进行简单的实现,但是并不是所有的接口都可以用Lambda表达式来实现,要求接口中定义的必须要实现的抽象方法只能是一个在JAVA8中 ,对接口加了一个新特性:default可以使用default对接口方法进行修饰
2020-09-10 10:07:54 571
原创 Session和Cookie和Token区别详解
Session和Cookie和Token到底有什么区别1.Cookiecookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。2.Sessio
2020-08-15 16:31:33 5009 1
原创 Swagger的使用详解以及与SpringBoot的整合
Swagger的使用1.Swagger是什么官方:Swagger是一个规范的、完整的的框架 这个框架主要的功能是生成、描述、调用和可视化的RESFful风格的服务Swagger是一个生成接口文档、以及接口描述、以及测试的这样一个框架2.Swagger2中的一些组件Swagger是一个开源的项目Swagger-tools:主要存放的是和Swagger集成和整合的工具Swagger-core:主要就是整个Swagger的核心Swagger-js:主要是用在JavaScript上的Swagger实
2020-08-15 16:25:55 258
原创 SpringBoot项目的用maven插件打包报Test错误
错误信息:Errors:StopAreaTest.testOne » IllegalState Failed to load ApplicationContext报错如下:解决方法:用idea右侧的maven Projects下的package功能打包maven工程时候出现的错误不用上述方式编译打包,改用命令行方式跳过Test,命令如下:mvn clean package -DskipTests这样maven就会跳过Test相关的编译,不会报错。...
2020-08-06 18:11:36 1913 3
原创 SpringCloud五大基本组件详解之config分布式配置中心(五)
config分布式配置中心1.简介在微服务中,每个功能模块其实都可以拆分成一个单独的服务实例,如果项目够大,必然会有很多服务单元,每个服务单元都有一份配置文件需要维护,这显得不太好维护,而且不方便协作开发。为了使服务实例的配置文件统一管理化,Spring Cloud Config提供了一套解决方案,建立一个配置服务中心,每个服务单元从config server中获取具体的配置文件,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。为了保证系统的稳定,配置服务端config ser
2020-07-28 15:08:07 416
原创 SpringCloud五大基本组件详解之zuul服务网关(四)
zuul服务网关1.概述通过前面的学习,使用Spring Cloud实现微服务的架构基本成型,大致是这样的:前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,似乎一个微服务框架已经完成了。服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能。Spring Cloud Netflix中的Zuul就担任了这
2020-07-28 14:54:10 299
原创 SpringCloud五大基本组件详解之Hystrix的熔断与降级(三)
Hystrix的熔断与降级1.Hystrix断路器1.1.分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.造成雪崩的原因可以归纳为以下三个:服务提供者不可用(硬件故障,
2020-07-28 14:32:33 443
原创 SpringCloud五大基本组件详解之Ribbon负载均衡(二)
Ribbon负载均衡简介1.Ribbon是什么SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出LoadBalanCer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器
2020-07-28 11:23:12 564 1
原创 SpringCloud五大基本组件详解之Eureka注册中心(一)
1.Eureka注册中心1.简介Eureka是Netflix的一个子模块,也是核心模块之一。Eureka是一个基于REST服务,用 于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务 架构来说是非常重要的,有了服务发现与注册,只需要用服务的标识符,就可以 访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心, 比如Zookeeper。2.Eureka的基本架构1-EurekaEureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址2-提
2020-07-28 11:05:27 410
原创 RabbitMQ的整合以及5种通讯模型
RabbitMQ的使用1、MQ是什么MQ:Message Queue :消息队列队列:简单的是就是一种数据结构 先进先出消息队列:就是用来进行消息传输的消息中间件:就是用来传输消息的中间载体编程中 有点类似咋们的 协议中间件 他只有一个作用:就是将你的信息发送到接受方 他并不关心 你发送的数据长啥样? 就类似于咋们生成中一个快递员的职责RabbitMQ就是消息中间件2、使用这个MQ能干什么2.1、流量消峰(解决高并发)2.2、模块之间的异步通信3、消息队列的中间件有哪些
2020-07-28 10:52:19 1053 2
原创 SpringCloud微服务概述
一、微服务概述1.什么是微服务微服务的架构是基于SOA架构演进来的一种架构模式,也就是将传统的单体架构或者分布式架构中的单体应用程序和服务划分为更小粒度的服务,这就是我们称之为微服务,这种服务运行在独立的进程中并与其他进程相隔离,各个服务之间采用基于HTTP的通信协议构建的RestFulAPI进行通信,每个微服务 都围绕着具体的业务二构建,其能独立的开发,构建,发布和部署到类成产环境和 生产环境,而不影响其它的依赖业务。开发微服务有2套技术栈: Dubbo(阿里开源的微服务框架) + ZooKee
2020-07-28 10:16:15 1643
原创 Redis分布式锁的实现和缓存穿透、雪崩、脑裂问题详解
SpringBoot整合Redis1、导包<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version> </dependency> <dependenc
2020-07-28 10:02:00 774
原创 Linux的使用以及JDK、MySQL、Tomcat的安装
Linux的基本使用1、Linux的基本的目录解析sbin/bin:这两个目录的作用是存放了Linux下的常用的命名工具(可运行的文件)data:存放数据的etc:存放的是整个Linux的配置文件(环境变量)lib/lib64:存放的是linux运行的时候需要依赖的库文件mnt:进行文件的挂载的(比如U盘的挂载)tmp:存放临时文件的var:这个目录页是村存放临时文件的home:存放用户信息的media:存放媒体资源文件的root:存放 root最大的用户信息的usr:安装文件的时候
2020-07-28 09:34:34 227
原创 从redis中取出list对象遍历java.lang.ClassCastException异常
找了3个多小时的bug,如下所示:错误信息:解决方案:把项目中的热部署注释掉就可以了原因如下:先把对象序列化到缓存中,然后在更改一些代码后,devtools会自动重新启动上下文并创建一个新的类加载器。当该缓存方法生效时,缓存抽象将在缓存中找到一个条目,并从缓存中对其进行反序列化。如果缓存库没有考虑上下文类加载器,那么这个对象会附加错误的类加载器...
2020-04-23 18:12:50 1474
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人