- 博客(225)
- 资源 (22)
- 收藏
- 关注
原创 @RefreshScope源码解析
RefeshScope这个注解想必大家都用过,在微服务配置中心的场景下经常出现,它可以用来刷新Bean中的属性配置,那么它是如何做到的呢?让我们来一步步揭开它神秘的面纱。就是说我们在修改了bean属性的时候项目不需要重新启动,就可以拿到最新的值。我们先来看下@RefreshScope的接口@Target({/***/ //创建基于类的代理(使用 CGLIB) ScopedProxyMode proxyMode() default ScopedProxyMode . TARGET_CLASS;
2023-03-26 00:25:48 1331 1
原创 锁等待超时
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction(errno: 11 "Resource temporarily unavailablerx_state状态为RUNNING就表示这个事物还在运行中,没有提交。LOCK_WAIT就是被阻塞了,需要等前面RUNNING的提交了才能到自己这边运行。
2022-12-20 21:15:00 1555
原创 Spring如何解决单例循环依赖
所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。那么spring在自动注入的时候是如何解决这个问题的呢?答案是:三级缓存,就是三个map,通过提早的暴露对象来解决这个问题。
2022-10-24 21:37:16 2012
原创 mybatis中mapper.xml热加载
只能说放在jar之外的目录,然后应用在启动的时候专门去这个目录读取xml加载到mybatis的内存中,这样就实现了mybatis的基本功能。如果说要热加载的话就需要有专门的程序去监听这个目录下文件的变化,哪个发生了变化就重新加载到内存中,使之生效。的方式不支持从外面的目录加载xml。刚开始我的想法就是:在应用打包成jar的时候,这些xml已经被打包进了jar里面了,如果要替换的话这些xml肯定是不能打包进去。通过查看mbatis的源码,我们发现mybatis经过解析会把xml的数据缓存在以下的变量中。
2022-08-21 14:01:21 2463
原创 Spring IOC之资源加载器
ResourceLoader 中最核心的方法为 getResource(),它根据提供的 location 返回相应的 Resource,而 DefaultResourceLoader 对该方法提供了核心实现(它的其它子类都没有提供覆盖该方法,所以可以断定ResourceLoader 的资源加载策略就封装 DefaultResourceLoader中)返回 ClassLoader 实例,对于想要获取 ResourceLoader 使用的 ClassLoader 用户来说,可以直接调用该方法来获取。.....
2022-08-11 21:04:14 1164
原创 Spring IOC之容器注入
spring最主要的功能就是IOC和AOP,IOC指的是容器注入,帮我们把Bean注入到容器中。实际上就是把类解析成spring能够识别的标识,而标识就是BeanDefinition,有了这个标识spirng就可以做各种各样的事情了。那么我们有必要了解什么是BeanDefinition并且它是如何生成的。什么是BeanDefinitionBeanDefinition中的常用属性BeanDefinition的常见读取器ChildBeanDefinition从Spring2.5开始,ChildBeanDefin
2022-07-03 10:21:31 1515
原创 SpringBoot之conditional注解
首先我们先了解一下@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,需要注入的Bean满足给定条件才可以注入到Spring IOC容器中。- 作用:根据是否满足某一个特定条件来决定是否创建某个特定的Bean- 意义:Springboot实现自动配置的关键基础能力...
2022-06-14 22:51:08 1440 2
原创 AQS(AbstractQueuedSynchronizer)原理
AQS 的全称为(),AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出大量应用广泛的同步器,比如我们提到的 ,,其他的诸如 ,, 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂
2022-06-12 15:26:07 929
原创 线程池工作原理
线程池最核心的思想就是把资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用。通过线程复用机制,并对线程进行统一管理,具有以下优点:1.降低系统资源消耗,通过复用已存在的线程,降低线程创建和销毁造成的消耗;2.提高响应速度。当有任务到达时,无需等待新线程的创建便能立即执行;3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗大量系统资源,还会降低系统的稳定性,使用线程池可以进行对线程进行统一的分配、调优和监控。总共包含以下 7 种(其中 6 种是通过 Executors
2022-06-04 09:58:49 1530
原创 spring-mybatis源码解析
本文主要围绕三个问题展开?- 1.spirng是怎么和mybatis关联起来的?- 2.xml和mapper是如何解析的- 3.mapper中的方法是怎么和xml中的方法关联起来的?
2022-05-11 21:45:05 1405
原创 mybatis-start原理解析
mybatis-spring-boot-starter的作用就是,在SpringBoot启动时,去扫描所有Mapper接口,然后为其增加一个代理实现类,在调用的过程中,我们实际调用的是这个代理对象。springboot提供了大量的starter方便集成各个组件。每个组件基本只要依赖了jar包,基本不需要或者需要少量的配置信息就可以直接使用了,那么在这简单的starter背后的原理是什么呢?
2022-04-17 20:49:01 1727 1
原创 SpringBoot配置类解析-ConfigurationClassPostProcessor后置处理器
ConfigurationClassPostProcessor是一个BeanFactory的后置处理器,因此它的主要功能是参与BeanFactory的建造,在这个类中,会解析加了@Configuration的配置类,还会解析@ComponentScan、@ComponentScans注解扫描的包,以及解析@Import等注解。ConfigurationClassPostProcessor主要重写了BeanDefinitionRegistryPostProcessor的postProcessBeanDe
2022-04-11 22:45:00 2193
原创 K8s之Service
Service也是Kubernetes里的一个API对象,而 Kubernetes 之所以需要 Service,一方面是因为Pod 的 IP 不是固定的,另一方面则是因为一组Pod 实例需要Service提供复杂均衡功能。所以Service是在逻辑抽象层上定义了一组Pod,为他们提供一个统一的固定IP和访问这组Pod的负载均衡策略。...
2022-04-10 11:17:42 1952
原创 SpringBoot属性加载-run方法(prepareEnvironment)
我们在项目中有时候会发现设置的变量没有生效,可能是被其它优先级高的变量给覆盖了。所以我们需要搞清楚SpringBoot的加载顺序。Spring Boot属性加载顺序(优先级由高到底)
2022-04-05 23:22:17 1463
原创 Aware原理
Aware接口从字面上翻译过来是感知捕获的含义。单纯的bean(未实现Aware系列接口)是没有知觉的;实现了Aware系列接口的bean可以访问Spring容器。这些Aware系列接口增强了Spring bean的功能,但是也会造成对Spring框架的绑定,增大了与Spring框架的耦合度。
2022-03-30 21:59:41 1783
原创 SpringBoot启动器加载器-run方法(callRunners)
在项目开发中,经常需要在项目启动的时候去读取配置文件、或者把数据库的数据加载到缓存中。Spring Boot提供了ApplicationRunner和CommandLineRunner来帮助我们实现这些需求,他们都是在Spring容器初始化完毕之后执行起run方法。
2022-03-23 21:09:17 3271 2
原创 SpringBoot-Bean创建流程
refresh()中最最重要的一个方法该方法负责初始化所有的单例bean。到目前为止,应该说是是 BeanFactory 已经创建完成,并且所有的实现了 BeanFactoryPostProcessor 接口的 Bean 都已经初始化并且其中的 postProcessBeanFactory(factory) 方法已经得到回调执行了。而且 Spring 已经“手动”注册了一些特殊的 Bean,如 environment、systemProperties 等。剩下的就是初始化 singleton bean
2022-03-21 20:37:35 5390 1
原创 SpringBoot-refresh解析
## refresh解析refresh方法是bean配置读取加载入口,也是SpringBoot启动的核心方法。从SpringApplication的run方法的`refreshContext(context);`里面可以找到
2022-03-19 22:15:00 2668
原创 SpringBoot监听器解析(ApplicationListener)
监听器模式又可以理解为观察者模式,在使用过程时监听某些事件的发生,然后对这些事件做出响应处理。ApplicationEvent :事件抽象类,根据不同的事件 ApplicationListener:接口,只有一个方法,传递了一个事件ApplicationEventMulticaster:事件广播器,主要就是用来负责对ApplicationListener的管理,添加、删除、事件广播。ApplicationEventPublisher:接口,主要用于发布事件
2022-03-12 10:42:27 2699 1
原创 SpringBoot系统初始化加载机制
springboot启动系统初始化加载机制,ApplicationContextInitializer类初始化以及SpringFactoriesLoader的作用
2022-03-09 22:18:01 2005 1
原创 kafka集群安装
准备工作准备三台服务器(hadoop129,hadoop130,hadoop131)kafka集群依赖于zookeeper,需要先安装zookeeper集群下载网址:http://kafka.apache.org/downloads.html版本:kafka_2.11-0.11.0.0.tgz安装部署1)解压安装包[bushro@hadoop129 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/2)修改解压后的
2022-02-19 09:04:23 1668 1
原创 Redis持久化方案
持久化方式通常数据库存在三种用于持久操作以防止数据损坏的常见策略:1.是数据库不关心故障,而是在数据文件损坏后从数据备份或快照中恢复。RDB就是这种情况2.该数据库使用操作日志记录每个操作的操作行为,以在失败后通过日志恢复一致性。由于操作日志是按顺序追加写入的,因此不会出现无法恢复操作日志的情况。类似于Mysql的重做和撤消日志。3.数据库不修改旧数据,而仅通过追加进行写入,因此数据本身就是日志,因此永远不会出现数据无法恢复的情况。CouchDB是一个很好的例子。AOF类似这种情况严格上讲Re
2022-02-10 21:18:01 5255
原创 mysql调优
不论是Index Nested-Loop Join 还是 Block Nested-Loop Join 都是在Simple Nested-Loop Join的算法的基础上进行优化,这里 Index Nested-Loop Join 和Nested-Loop Join 算法是分别对Join过程中循环匹配次数和IO 次数两个角度进行优化。Index Nested-Loop Join 是通过索引的机制减少内层表的循环匹配次数达到优化效果,而Block Nested-Loop Join 是通过一次缓存多条数据批
2021-11-14 21:40:21 1637
原创 Activiti6.0 (四)BPMN2.0规范
BPMN2.0(Business Process Mo是—套业务流程模型与符号建模标准精准的执行语义来描述元素的操作以XML为载体,以符号可视化业务BPMN2.0元素流对象(Flow Object)活动(Activities) 【User Task 、Service Task…】事件(Events) 【Start Event、End Event…】网关(Gateways)【Exclusive Gateway.….】核心流程任务Service Task
2021-08-03 22:06:11 1394
原创 Activiti6.0 (三)核心API
核心APIRepositoryService:负责对流程定义文件的管理,操作一些静态文件(流程xml、流程图片),获取部署对象和资源对象RunTimeService:对流程进行控制,可用于启动流程、暂停、挂起等,有方便的api来查询正在运行的流程实例和流程对象。可对流程中上下文数据进行设置和获取TaskService:人工任务,对人工任务进行增删改查,可对任务进行指定到用户或用户组。也可以对用户任务上下文数据进行设置和获取IdentityService:对用户及用户组的管理,创建用户用户组
2021-08-02 21:21:38 1190
原创 Activiti6.0 (二)数据扭转过程
部署相关表act_ge_bytearray:保存和流程引擎相关的资源,只要调用了Activiti存储服务的API,涉及的资源均会被转换为byte数组保存到这个表中,部署几次就会有几条信息act_re_deployment:部署信息会被保存在部署表中,部署几次就会有几条信息act_re_procdef:如果发布部署的文件是流程文件(.bpmn或者.BPMN20.xml),则除了会解析这些流程文件,将内容保存到资源表外,还会解析流程文件的内容,形成特定的流程定义数据,写入流程定义表中。对于同一个key
2021-07-18 21:27:29 1475 1
原创 idea回退操作reset、revert
在团队合伙开发的时候,我们有时会出现错误提交的情况,或者新上线的功能有bug,无法一下子修复,需要进行回退。idea工具就为我们提供了一下几个操作回退(reset)、反做(revert)RESET命令操作是对本地的代码有修改,如果要对远程的话,reset之后再进行提交本地和远程代码不一样的情况下也可以操作reset --soft将HEAD引用指向给定提交。索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。案例1、2、3的提交分别就是后面的注释1231、2、3
2021-07-03 23:32:34 15094 3
原创 Activiti6.0(一)工作流入门
文章目录工作流是什么工作流引擎对业务和开发的改变工作流对团队的作用核心API核心模块activiti-engine工作流是什么工作流(Workflow)是对工作流程及其各操作步骤之间业务规则的抽象、概括描述工作流建模即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算要解决的问题是为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务工作流引擎对业务和开发的改变可以快速响应、灵活调整线上流程业务和开发基于流程模型沟通
2021-06-30 21:38:20 1646
转载 Activiti6.0 - 核心数据库表及字段注释说明
一、通用数据表1、资源表,act_ge_bytearray用于保存和流程引擎相关的资源,只要调用了Activiti存储服务的API,涉及的资源均会被转换为byte数组保存到这个表中。一般情况下,Activiti使用这个表来保存字符串、流程文件的内容、流程图片内容。主要包含如下字段:字段注释REV_数据版本,Activiti为一些有可能会被频繁修改的数据表,加入该字段,用来表示该数据被操作的次数。Name_资源名称,类型为varchar,长度为255字节。DEPL
2021-06-27 21:28:48 2347 1
原创 MySQL二进制日志
文章目录mysql复制功能解决了什么问题mysql二进制日志二进制日志二进制日志的格式(段)二进制日志的格式(行)二进制日志的格式(混合)mysql二进制日志格式对复制的影响基于SQL语名的复制( SBR )优点缺点基于行的复制( RBR )优点缺点混合模式mysql复制工作方式基于日志点的复制基于日志点的复制配置步骤实际操作(yum安装的mysql 5.7)优点缺点基于GTID的复制基于GTID的配置步骤案例操作优点缺点选择复制模式要考虑的问题复制架构一主多从的架构拥有备库的主-主复制拓扑Mysql复制常
2021-06-13 09:25:35 1201 1
原创 k8s安全机制(认证授权)
文章目录Kubernetes 安全机制Authentication 认证https证书认证需要认证的节点两种类型安全性说明证书颁发kubeconfigServiceAccountSecret 与 SA 的关系授权Kubernetes 安全机制Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介,也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。Kubernete
2021-03-28 20:19:20 2009 2
原创 jvisualvm远程连接的三种方式
基于jatatd实现远程连接jstatd是一个基于RMI (Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口,从而允许监控工具远程地连接到本地的JVM配置安全策略默认情况下,Java的安全策略比较严格,并不允许jstatd直接启动,因此,需要设置下安全策略。不同的JDK版本配置方式不同,主要是由于JDK9开始,已经不再有tools.jar导致的。创建安全策略文件,命名为:jstatd.all.policy,下
2021-03-13 09:32:40 7469 1
原创 synchronized中的偏向锁、轻量级锁、重量级锁
对于synchronized这个关键字,可能之前大家有听过,他是一个重量级锁,开销很大,建议大家少用点。但到了jdk1.6之后,该关键字被进行了很多的优化,,建议大家多使用。在现在的版本中,锁的状态总共有四种:无锁状态偏向锁轻量级锁重量级锁锁的“重量”从左到右,依次递增锁实际上是加在对象上的,那么被加了锁的对象我们称之为锁对象,在java中,任何一个对象都能成为锁对象。为了让大家更好着理解虚拟机是如何知道这个对象就是一个锁对象的,我们下面简单介绍一下java中一个对象的结构java对象
2021-03-11 20:49:33 1231
原创 k8s资源清单和pod生命周期
文章目录k8s中的资源名称空间级别资源清单常用字段说明必须的字段spec 主要对象额外的参数项创建 Pod 的资源模板 实例测试启动 Pod查看 pod 是否启动成功启动失败查看详情删除pod,创建pod容器生命周期Init容器作用Init容器使用特殊说明探针探针就绪检测探针存活检测启动退出动作重启策略状态情况k8s中的资源K8s中所有的内容都抽象为资源,资 源实例化之后,叫做对象名称空间级别工作负载型资源( workload ): Pod、 ReplicaSet、 Deployment、 S
2021-03-07 21:26:59 1047
原创 k8s存储 emptyDir hostPath PvPvc
背景容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的volume抽象就很好的解决了这些问题。Kubernetes 中的卷有明确的寿命 —— 与封装它的 Pod 相同。所f以,卷的生命比 Pod 中的所有容器都长,当这个容器重启时数据仍然得以保存。当然,当 Pod 不再
2021-03-01 19:49:11 1118
原创 K8s服务发现和负载均衡
环境安装参考前面几篇主机节点cpu内存硬盘192.168.233.140master124g30g192.168.233.141node124g30g192.168.233.142node224g30g192.168.233.143harbor仓库24g30g准备工作143上面使用docker下载nginx的镜像,然后上传到harbor仓库。镜像的话可以在https://hub.docker.com/上面找自己想要的镜
2021-02-28 15:30:44 2466
原创 harbor仓库环境搭建
环境准备安装docker该插件可以直接把本地的东西拖到服务器yum -y install lrzsz修改hostname不修改也是可以的,后面就都是用ip的形式hostnamectl set-hostname hub.bushro.comsu 其它的服务器需要添加当前的hostname,当前的需要添加其它的服务器echo "192.168.233.143 hub.bushro.com" >> /etc/hosts参考前面,需要先更新yum的镜像systemctl
2021-02-27 15:40:16 883
原创 生产报错:too many open files
生产环境上的定时任务脚本本来在应用上是跑的好好的,突然发现就都失败了,急忙去生产服务器上面看。发现了下面这个报错。这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。经常在使用linux的时候出现,大多数情况是由于程序没有正常关闭一些资源引起的(比如读写文件),所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。经过检查并不是资源未关闭而造成的。就怀疑是否当前
2021-02-21 09:52:33 1335
原创 接口幂等性设计
接口幂等性在系统中,一个接口运行多次,与运行一次的效果是一致的什么情况下需要幂等性重复提交、接口重试、前端操作抖动等业务场景:用户多次点击提交订单,后台应只生成一个订单业务场景:支付时,由于网络问题重发,应该只扣一次钱并不是所有的接口都要求幂等性,要根据业务而定幂等性的核心思想:通过唯一的业务单号保证幂等非并发情况下,查询业务单号有没有操作过,没有则执行操作并发的情况下,整个操作过程加锁Select操作:不会对业务数据有影响,天然幂等Delete操作:第一次已经删除,第二次也
2020-11-22 20:58:35 1877 1
原创 Logstash同步数据
LogstashLogstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。详细说明可以看官方文档。下载地址:https://www.elastic.co/cn/logstash实践功能:数据同步,把mysql里面的数据同步到elasticsearch中logstash有两种同步方式一种是以id作为同步边界,一种是以update_time作为同步边界。logstash有一个定时任务,定时任务到期后就会进行同步。如果是以id为同
2020-09-12 18:28:10 2917
2021最新java面试合集pdf.rar
2021-09-23
信息系统项目管理师的思维导图
2021-08-04
kernel-headers-3.10.0-957.el7.x86_64
2020-12-01
bootstrap-table
2018-08-05
小程序代码高亮
2018-06-05
QT5开发实例以及源码
2018-05-12
基于串口通信的RXTXcomm.jar,rxtxParallel.dll,rxtxSerial.dll
2018-05-07
datatables+springmvc+bootstrap实现分页
2018-05-04
PageHelper分页插件的使用
2018-04-21
spring整合通用mapper
2018-04-20
jdk1.8中文api
2018-04-18
spring boot静态资源部署
2018-04-16
springmvc的校验包
2018-04-09
wangEditor-3.0.0.zip绝对可用
2018-01-28
SpringMvc源码
2017-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人