自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java -Djarmode=layertools -jar application.jar extract 报错

springboot jar extract 报错

2022-08-24 00:19:16 2950 1

原创 深入理解java虚拟机 笔记

文章目录内存区域程序计数器java虚拟机栈本地方法栈java堆方法区全局字符串池(string pool也有叫做string literal pool)静态常量池,即Class文件中的常量池运行时常量池常量池总结直接内存对象的创建对象的内存布局对象头Mark wordKlass实例数据对齐填充对象的访问定位内存区域程序计数器线程私有 ,可以看作是当前线程所执行的字节码的行号指示器,字节码解释器就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。java虚拟机的多线程是通过线程轮流切换、

2021-02-10 09:12:44 817 1

原创 杂记2

文章目录form-data、x-www-form-urlencoded、raw、binaryapplication/x-www-urlencodedmultipart/form-datarawbinarymultipart/form-data与x-www-form-urlencoded区别参考form-data、x-www-form-urlencoded、raw、binary以上都是一个http请求中可选的内容类型application/x-www-urlencodedapplication/x-

2020-12-15 21:10:16 725

原创 AOP、代理模式、Spring AOP

文章目录AOP特点概念通知方法关于代理模式静态代理动态代理:JDK动态代理CGLIB动态代理AspectJ简介Spring AOP示例代码底层实现参考AOPAOP(Aspect-OrientedProgramming,面向切面编程)  在不修改源代码的情况下,可以实现功能的增强。  基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强 。  可以做到将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻

2020-12-10 16:02:20 597

原创 学习杂记

记录一些简短的内容。文章目录@EuqalsAndHashCode@Valid@ResponseEntityResponseStatus参考@EuqalsAndHashCodelombok插件的注解此注解会生成equals(Object other) 和 hashCode()方法。1.它默认使用非静态,非瞬态的属性。且不使用父类的属性,即默认为false2.指定为true则在1的基础上调用父类的方法@ValidController层通过对标注有@Valid的JavaBean进行校验,并将

2020-12-09 21:10:03 640

原创 正向代理与反向代理、跨域问题、X-Forwarded-For、X-Real-IP

文章目录正向代理和反向代理X-FORwarder-ForX-Real-IP参考正向代理和反向代理正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端X-FORwarder-ForX-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上

2020-12-08 23:27:16 1497

转载 @ControllerAdvice

ControllerAdvice对于@ControllerAdvice,我们比较熟知的用法是结合@ExceptionHandler用于全局异常的处理,但其作用不仅限于此。ControllerAdvice拆分开来就是Controller Advice,关于Advice,其是用于封装一个切面所有属性的,包括切入点和需要织入的切面逻辑。这里ContrllerAdvice也可以这么理解,其抽象级别应该是用于对Controller进行“切面”环绕的,而具体的业务织入方式则是通过结合其他的注解来实现的。@Contro

2020-12-06 14:48:47 394

转载 Reactor反应式编程

文章目录反应式编程介绍Reactor 简介Flux 和 Mono创建 FluxFlux 类的静态方法generate() 方法create()方法创建 Mono操作符buffer 和 bufferTimeoutfilterwindowzipWithtakereduce 和 reduceWithmerge 和 mergeSequentialflatMap 和 flatMapSequentialconcatMapcombineLatest消息处理“冷”与”热”序列反应式编程(Reactive Programm

2020-12-01 17:02:45 1022

原创 Executor、Callable、Future、Lock、辅助类、CompletableFuture

文章目录Executor框架浅析Executor框架的两级调度模型Executor框架的结构参考Executor框架浅析首先我们得明白一个问题,为什么需要线程池?在java中,使用线程来执行异步任务时,线程的创建和销毁需要一定的开销,如果我们为每一个任务创建一个新的线程来执行的话,那么这些线程的创建与销毁将消耗大量的计算资源。同时为每一个任务创建一个新线程来执行,这样的方式可能会使处于高负荷状态的应用最终崩溃。所以线程池的出现为解决这个问题带来曙光。我们将在线程池中创建若干条线程,当有任务需要执行时就

2020-11-30 17:24:51 502

原创 Spring Security OAuth2学习

Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架,它提供了完整的安全性解决方案,能够在web请求级别和方法调用级别处理身份证验证和授权。因为基于Spring框架,所以Spring Security充分利用了依赖注入和面向切面的技术。

2020-11-12 21:49:55 678

原创 Effective Java笔记

文章目录第二章:创建和销毁对象第1条: 静态工厂方法代替构造器优势1:它们有名称优势2:不必在每次调用它们的时候都创建一个新对象。优势3:它们可以返回原返回类型的任何子类对象。优势4:所返回的对象的类可以随着每次调用而发生变化优势5:方法返回的对象所属的类,在编写包含该静态方法的类时可以不存在。缺陷1:类如果不含公有或保护的构造器。就不能被子类化(继承)。#### 缺陷2:没有统一的标准。相对构造函数较难查明。第二章:创建和销毁对象第1条: 静态工厂方法代替构造器优势1:它们有名称更为清楚。优势2

2020-10-01 12:57:22 424

原创 Lambda表达式、函数式接口、Stream

文章目录Lambda简介类型推断目标类型方法引用域以及访问限制局部变量静态变量和成员变量Lambda不能访问函数接口的默认方法代码函数式接口Function接口Consumer接口Supplier接口Predicate接口Stream简介流程创建有限Stream无限Stream空Stream操作中间操作(中间方法)过滤器(Filter)排序(Sorted)映射(Map)代码完结操作匹配(Match)收集(Collect)计数(Count)规约并行Stream懒操作Lambda简介Lambda表达式本质

2020-09-26 23:14:13 866

原创 分布式事务解决方案 Seata 1.2.0

文章目录简介整体机制概念部署启动Server资源建表修改file.conf修改registry.conf启动使用OrderService依赖简介Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。整体机制两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。二阶段:1.提交异步化,非常快速地完成。2.

2020-09-12 15:06:34 343

原创 Sentinel 流量控制组件

文章目录简介简介Sentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩”效应,为微服务系统提供了稳定性的解决方案。随着Hytrxi进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况,Hystrix采用线程池对服务的调用进行隔离,Sentinel采用了用户线程对接口进行隔离,二者相比,Hystrxi是服务级别的隔离,Sentinel提供了接口级别的隔离,Sentinel隔离级别更加精细,另

2020-09-11 19:57:09 358

原创 Nacos 服务注册中心、配置中心、持久化、集群

文章目录简介环境Nacos作为注册中心服务提供者依赖application.yml控制器服务消费者RestTemplate控制器测试简介Nacos,英文全称Dynamic Naming and Configuration Service,Na为naming命名,co为configuration配置,s为服务,动态命名与配置服务。Nacos主旨是一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它包含了注册中心、配置中心、健康检查、动态DNS、服务元数据和流量管理等功能。环境下载地址

2020-09-09 23:01:21 960

原创 链路跟踪 Sleuth

文章目录简介概念使用zipkin环境项目配置依赖-所有链路上的服务都需要添加application.yml-所有链路上的服务都需要添加如下的配置测试简介Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。概念SpanSpan是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。最开始的初始Span

2020-09-09 17:42:34 310

原创 消息驱动 Spring Cloud Stream

文章目录简介使用常用注解依赖生产者application.yml自定义输出通道Controller类消费分组消费者 8802application.yml自定义输入通道测试类消费者 8803测试消息持久化简介Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于 Spring Boot 来创建独立的、可用于生产的 Spring 应用程序。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并引入了发布-订阅、消费组、

2020-09-09 16:56:56 337

原创 消息总线 Spring Cloud Bus

文章目录简介使用场景架构与原理使用配置中心config-server依赖application.yml配置客户端config-client依赖与配置中心一样,记得添加@RefreshScopeapplication.ymlbootstrap.ymlRabbitMQ全局刷新post请求http://localhost:3333/actuator/bus-refresh指定服务刷新post请求http://localhost:3333/actuator/bus-refresh/服务名:服务端口简介配置中心C

2020-09-09 12:56:01 992

原创 配置中心 Spring Cloud Config

文章目录简介使用gitServer端依赖application.yml访问规则测试Client端-实现动态刷新依赖application.ymlbootstrap.ymlController测试简介Spring Cloud Config 是一个解决分布式系统的配置管理方案,它包含了 server 和 client 两个部分。server 用来获取远程的配置信息(默认为 Git 仓库),并且以接口的形式提供出去;client 根据 server 提供的接口读取配置文件,以便于初始化自己的应用。使用

2020-09-08 21:43:02 362

原创 服务网关 Spring Cloud Gateway、限流算法、基于redis的令牌桶限流、自定义异常处理

概述Spring cloud gateway是spring官方基于Spring 5.0、Spring Boot2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供简单、有效和统一的API路由管理方式,Spring Cloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且还基于Filer链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等。特征基于

2020-09-08 16:46:05 809

原创 熔断器 Hystrix

服务雪崩\color{red}{服务雪崩}服务雪崩假设存在如下调用链:而此时,Service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算Service A能扛得住请求,Service B和Service C未必能扛得住这突发的请求。此时,如果Service C因为抗不住请求,变得不可用。那么Service B的请求也会阻塞,慢慢耗尽Service B的线程资源,Service B就会变得不可用。紧接着,Service A也会不可用,这一过程如下图所示如上图所示,一个服务失败,导

2020-09-07 18:29:01 109

原创 Spring Cloud OpenFeign 服务调用与负载均衡

介绍作为Spring Cloud的子项目之一,Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式,为微服务架构下服务之间的调用提供了解决方案。首先,利用了OpenFeign的声明式方式定义Web服务客户端;其次还更进一步,通过集成Ribbon或Eureka实现负载均衡的HTTP客户端。说到OpenFeign,不得不提的就是Ribbon。Ribbon是Netflix公司的一个开源的负载均衡项目,是一个客户端负载均衡器,运行在消费者端。OpenFei

2020-09-06 16:48:36 639

原创 互斥锁、读写锁、自旋锁、乐观锁、悲观锁、CAS

CASCAS是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。例如:这个时候我们可以使用Java并发包原子操作类(Atomic开头)CAS(比较并交换)是CPU指令级的操作,只有一步原子操作,所以非常快jdk5增加了并发包java.util.concurrent.*,其下

2020-09-06 11:20:11 595

原创 Ribbon 负载均衡器

简介Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。负

2020-09-06 01:21:30 244

原创 CAP理论

CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)、和P(分区容错性)。由于分区容错性P在分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。AP架构CP架构取与舍CAP理论提出就是针对分布式数据库环境的,所以,P这个属性是必须具备的。P就是在分布式环境中,由于网络的问题可能导致某个节点和其它节点失去联系,这时候就形成了P(partition),也就是由于网络问题,将系统的成员隔离成了2个区域,互相无法知道对方的状态,这在分布式环境下是非常常见的。因为P是必须

2020-09-05 21:32:37 211

原创 Zookeeper的基本使用、配置为注册中心

Zookeeper官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制。1.Zookeeper维护一个类似文件系统的数据结构:每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够自由的增加、删除znode,

2020-09-05 18:00:29 1734

原创 Eureka 服务注册中心

Eureka-server集群启动类添加注解 @EnableEurekaServer依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dep...

2020-09-03 00:29:05 86

原创 PV操作、生产者消费者问题、读者写者问题、睡眠理发师问题

P、V操作原语定义:P原语操作: 信号量减1,若此时信号仍然大于等于0,则进程继续执行;若此时信号量小于零,则进程阻塞,在队列中排队,然后等待。V原语操作: 信号量加1,若此时信号量大于零,则进程继续执行,若此时信号量小于或等于零,则唤醒阻塞在此信号量的进程,然后执行该V操作的进程继续执行。生产者消费者问题伪代码描述item B[k];semphore empty;empty=k;semphore full;full=0;semphore mutex;metax=1;int in=

2020-08-28 22:21:39 3296

原创 Mybatis 记录

我们传入的实体类不包含主键,由数据库自增。这两个参数的设置把刚刚插入的那条数据的主键刷新到传入的实体类useGeneratedKeys参数只针对 insert 语句生效,默认为 false;

2020-08-27 20:30:03 114

原创 engine=InnoDB AUTO_INCREMENT=1 default charset=utf8

create table 'payment'( 'id' bigint(20) not null auto_increment comment 'ID', 'serial' varchar(200) default '', primary key ('id'))engine=InnoDB AUTO_INCREMENT=1 default charset=utf8Engineengine=InnoDB指定引擎为InnoDB,默认也为InnoDB。MyIsam:适合只读的数据库

2020-08-27 17:39:53 4272

原创 fail-fast和fail-save

简介fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出ConcurrentModificationException异常。它是一种对集合的遍历的错误检测机制,在遍历中途中出现意料之外的修改时,通过unchecked异常暴力的反馈出来。这种机制经常出现在多线程环境下,当前线程会维护一个技术比较器,即expectedModCount,记录已经修改的次数,进入遍历前,把

2020-08-20 10:35:44 443

原创 java泛型

泛型与普通的 Object 代替一切类型这样简单粗暴而言,泛型使得数据的类别可以像参数一样由外部传递进来。它提供了一种扩展能力。它更符合面向抽象开发的软件编程宗旨。它也是一种类型安全检测机制,一定程度上提高了软件的安全性防止出现低级的失误。注意泛型添加的位置,如果是类上的泛型,添加在类名之后;如果是方法上的泛型,添加在修饰符之后,返回值之前。泛型与集合泛型通常与集合一起出现。List和List<?>和List的区别public class Test01 { public s

2020-08-18 17:56:10 466

原创 ArrayList源码学习

ArrayList线程不安全,内部使用数组实现transient Object[] elementData; // non-private to simplify nested class access无参构造函数源码:this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;//...DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}说明ArrayList使用无参构造时,初始为空数组,size为0。调用add方法向

2020-08-17 17:19:58 118

原创 Spring Boot的异步、定时、邮件任务

异步任务启动类注解@EnableAsyncController @GetMapping("async") public String asyncTest(){ asyncService.asyncHelloService(); return "async"; } @GetMapping("noAsync") public String noAsync(){ asyncService.notAsyncHelloS

2020-08-17 16:36:01 62

原创 springboot+Dubbo+Zookeeper

依赖,版本可能不兼容,在测试代码中没崩。 <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> <exclusi

2020-08-17 16:34:27 67

原创 idea快捷键

后退前进ctrl+alt+左右方向键或将按钮添加到菜单setting->Appearance&Behavior->Menus and Toolbars->Navigation Bar Toolbar->Toolbar Run Actions选中后选择上方的+号->Add action->Main menu->Navigate->选中Back和Forword即可查看类图ctrl+shift+alt+u查看类方法alt+7查看类继承

2020-08-17 16:32:10 107

原创 消息队列RabbitMQ、整合SpringBoot

一、消息队列相关概念消息队列(message queue)消息队列是应用系统之间通信的方法,本质是队列,具有先进先出(FIFO)的特点,队列的元素是消息,所以叫消息队列,是一种中间件。JMSJava Message Service,即 Java 消息服务,是基于 JVM 消息代理的规范。实现:ActiveMQ 。AMQPAdvanced Message Queuing Protocol,即高级消息队列协议,也是一个消息代理的规范,兼容 JMS。实现:RabbitMQ。Spring中对消息队列的

2020-08-11 17:27:09 494

原创 Redis使用-与SpringBoot整合

一、JSR-107规范  Java Caching定义了5个核心接口,分别是CachingProvider(缓存提供者)、CacheManager(缓存管理器)、Cache(缓存)、Entry(缓存键值对)和Expiry(缓存时效)。  CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。一个应用可以在运行期访问多个CachingProvider。  CacheManager定义了创建、配置、获取、管理和控制多个唯一命名的Cache,这些Cache存在于Cac

2020-08-11 10:46:10 426

原创 Docker常用命令、使用Dockerfile构建SpringBoot镜像、Docker Compose的使用

搜索镜像docker search tomcat拉取镜像docker pull tomcat:tags号(不加tags号时默认为latest)查看镜像docker images删除镜像docker rmi 镜像id根据镜像启动容器docker run --name 容器名称 -d(后台运行) 镜像名称或者镜像id启动已经存在的容器docker start 容器id查看运行中的容器和查看所有容器docker ps 和 docker ps -a停止运行中的容器docker stop

2020-08-10 12:18:24 234

原创 一次xshell与centos连接不上的解决方法

先确保在虚拟机上能正确执行下面两条命令service iptables stopservice sshd stop如果还是连接不上,测试主机与虚拟机之间能否相互ping通,一般来说此时还是连接不上的话,起码有一方是ping不通的。发现主机无法ping通虚拟机。把主机网卡VMnet8的IPv4的IP改为与虚拟机的IP网段一样。主机成功ping通,xshell也连接成功...

2020-08-09 16:32:24 238

空空如也

空空如也

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

TA关注的人

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