自定义博客皮肤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)
  • 收藏
  • 关注

原创 SpringBoot自动装配源码分析

当我们在Spring Boot应用中添加了该注解时,Spring Boot会根据约定大于配置的原则,自动配置一些常用的Bean和组件,从而简化开发流程。最后,根据一些条件对自动配置类进行过滤,并返回一个包含候选自动配置类和已排除自动配置类的。通过这种方式,Spring Boot能够根据约定大于配置的原则,自动加载和配置常用的Bean和组件,使开发者能够更加便捷地构建和部署应用程序。在这个方法中,它首先判断是否启用了自动装配,然后加载自动配置的元数据,并获取自动配置的入口。最后,返回自动配置的类名数组。

2023-07-24 16:14:21 278

原创 Nacos注册中心源码服务注册源码分析

nacos服务注册源码分析

2023-03-27 10:57:06 852

原创 spring事务源码底层实现

spring的事务有两种,一种是声明是事务,一种是编程式事务,这里我们讲的是基于注解实现的方式,为什么我们在一个方法上面加上一个@Transactional注解,程序就能自动管理我们的本地事务,我们知道在SpringBoot项目中要用到Spring的事务,在启动配置类上面要加一个@EnableTransactionManagement,我们看看这个注解为我们做了些什么东西,可以很明显看到这个是一个组合注解,通过Import注解给我们导入了一个叫做TransactionManagementConfig

2021-12-01 15:48:42 256

原创 SpringBoot里面事务是如何生效的

相信使用过SpringBoot框架的朋友们,应该很熟悉里面如何使用事务,只要在service实现类里面的方法上面添加一个@Transcation的注解,然后框架就会自动管理我们的事务,那么这个SpringBoot是如何做到这一点的呢,让我们一起来看看源码1.首先来看看DataSourceTransactionManagerAutoConfiguration这个类这个类实例化的实际也是利用了SpringBoot的自动装配原理,这里就不过多解释,因为我们在使用事务的时候已经引入了JdbcTemp

2021-11-30 15:28:54 741

原创 ReentrantLock源码分析

对于ReentrantLock我相信对于做Java的朋友应该不会陌生,它是juc并发工具包下面的一个并发工具类,对于一些存在资源竞争的情况下,我们经常会用到,和java关键字synchronized不同的是,ReentrantLock提供了更好的灵活性以及实现了公平和非公平锁,还有超时的概念,那ReentrantLock底层是如何实现的呢,那我们通过源码去深入了解他实现的原理,我们才能更好的使用。首先我们看我们平常使用ReentrantLock的例子这里通过构造方法初始化了Reentr.

2021-11-30 12:01:13 177

原创 SpringCloud Feign 源码底层如何调用Ribbon实现服务调用的负载均衡

在SpringCloud微服务中调用都不是直接用Ribbon进行服务调用,因为那样的化项目中的代码量会增加很多,微服务之间的调用是用Feign来进行调用,下面就是普通的一个接口调用例子这样就可以进行服务间的调用了,那么Feign底层源码是如何调用Ribbon对服务提供者进行负载均衡的调用呢,这里调用的源码入口是FeignInvocationHandler这个类,调用上图的orderFeignService.findOrderByUserId(id)其实就是在调用这个FeignInvocationHa

2021-05-07 08:46:11 571

原创 Ribbon源码是如何获取注册中心的服务列表

ribbon的作用是微服务客户端的一个负载均衡发现器,今天我们就讲一下ribbon底层源码是如何从注册中心获取服务列表的,下面我们就讲一下源码是如何实现的我之前有篇文章讲过,controller通过调用restTemplate.getForObject()方法最终会调用到LoadBalancerInterceptor的intercept方法,继续进入这个execute方法在这里会先去获取一个负载均衡器IloadBalancer,我们看看这个this.getLo...

2021-04-30 13:55:31 1796 6

原创 源码分析sentinel工作流程

一、sentinel简介:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。伴随着公司用户量和流量的日益增加,对于数据库的压力是越来越大,Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护二、源码入口使用sentinel有两种方式,一种方式是对需要限流和降级的接口资源方法上面加入@SentinelResource注解还有一种就是通过拦截器的方式进行资源保护限流和降级,其实两种方法执行的关键方法都是同一段代码,今天我们就讲 一下通过注解这种aop切面的形式,sentinel

2021-04-24 11:12:37 312

原创 深入源码理解Ribbon的运行机制

一、什么是Ribbon?Ribbon是Netflix公司开源的一个负载均衡的项目,负载均衡分为两种,一种是服务端的负载均衡,比如nginx,还有一种是客户端负载均衡,而ribbon就是一个基于客户端负载均衡器,运行在客户端,一般在微服务中结合注册中心和Feign使用,今天我们来了解一下Ribbon底层源码是如何实现负载均衡的,这里我们使用SpringBoot项目来学习ribbon的源码分析二、源码入口这里我们使用Spring提供的RestTemplate工具类来发起微服务调用,使用过ribbon的程序

2021-04-18 09:53:39 379

原创 SpringBoot整合MyatisPlus shardingjdbc分库分表分库分表实战

一、分库分表环境搭建1、创建SpringBoot项目2、引入相关maven依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apa.

2021-04-12 16:49:50 140

原创 Nacos注册中心源码分析二(服务端注册底层源码分析)

上篇文章介绍了,nacos客户端底层是如何实现服务注册的,通过源码分析我们知道在客户端启动的时候,通过NacosAutoServiceRegistration这个类继承了ApplicaqtionListener,最终在spring容器启动的时候会回调onApplicationEvent这个方法,最终会通过发起http请求调用的Nacos服务端提供的接口,那么这篇文章我们来聊一下Nacos服务端是如何实现服务注册的逻辑的。一,源码下载 首先从github上面将Naocs的代码下载下来,然后...

2021-04-11 10:37:16 490

原创 duboo源码分析前篇(Spring 容器里面自定义标签应用与实现源码分析)

最近一直在看dubbo的源码,总寻思要总结一下源码的一个感受,这篇文章本篇我们讲解spring自定义标签的使用及原理,这应该是dubbo与spring整合源码分析的前置基础知识,只有掌握了如何在spring容器里面自定义标签的使用,以及spring是如何解析自定义标签的底层实现,才能开始阅读dubbo的源码,文章分为三个小节来讲解。为什么要自定义标签 自定义标签使用 spring是如何解析自定义标签 1.为什么自定义标签自定义标签是spring为了给开发人员扩展组件使用的,因为它提供了一

2021-02-27 13:00:39 70

原创 Nacos注册中心源码分析一

Nacos核心功能点服务注册:Nacos客户端会通过发送REST请求的方式向Nacos服务端注册自己的服务,发布元数据,比如ip地址、端口等信息。Nacos服务端接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。服务心跳:在服务注册后,Nacos客户端会维护一个定时心跳来持续通知Nacos服务端,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。服务健康检查:Nacos服务端会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它

2020-10-06 12:19:54 613 1

原创 SpringBoot自动装配原理源码分析

对于经常使用SpringBoot的程序员来说,SpringBoot大大简化了开发的工作量,节省了大量的配置工作,在SpringBoot启动的时候就自动将相关的配置给封装好了,也就是自动装配功能1.SpringBoot的启动入口@SpringBootApplication可以看到SpringBootApplication是一个组合注解 ,包含了@ComponentScan,@SpringBootConfiguration,@EnableAutoConfiguration,三个注解,点击Enable

2020-08-06 09:31:27 683

原创 基于zookeeper分布式锁

手写代码模拟zookeeper分布式锁1.zookeeper服务器 2.代码模拟分布式锁第一部如何安装Zookeeper这里就不再累述了,网上有很多教程,自行百度一波,具体看代码 如何实现2.1 maven工程新建maven工程,导入zookeeper 和zkClent依赖,这里使用ZkClient客户进行操作,代码量更加精简<dependency> <groupId>com.101tec</groupId> <artifactId

2020-06-24 14:42:02 153

原创 深入源码分析SpringCloud组件Feign工作原理

Feign对于使用过SpringCloud微服务的程序员来说,想必都很熟悉,微服务之间的调用时基于Http方式的,ribbon提供了一个RestTemplate的类进行调用,不过并不是好用,服务与服务之间调用的化代码冗余量很大,所以Feign就产生了,使得微服务之间的调用可以声明式调用。大大简化了代码量Feign在项目中的配置和使用在SpringCloud项目中使用Feign,需要在配置类里面加入@EnableFeignClients注解,开启Feign服务配置声明式客户端调用接..

2020-06-17 15:54:12 667

原创 windows环境mysql主从配置

windows环境mysql主从配置◼ 主从复制:是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据 库一般是准实时的业务数据库。 ◼ 主从复制的作用:做数据的热备,从数据库作为后备数据库,主数据库服务器故障后, 可切换到从数据...

2020-04-28 16:35:21 1357

原创 前后端分离项目使用nginx配置负载均衡和https证书

前端时间,由于公司需要接口访问使用https的方式,因为我们的项目是前后端分离的形式,使用nginx进行反向代理,所以就研究了一下如何使用nginx配置服务的负载均衡和https证书的配置,下面记录了详细的步骤一、Nginx配置SSL实现Https访问 实现https一般需要向一些第三方机构去申请证书,不过大都是收费的,这里使用openssl生成免费的证书使用 OpenSSL 生...

2020-04-17 12:23:54 1559

原创 前后端分离项目使用nginx 部署 并且配置https证书访问

前端时间公司需要配置https访问,所以研究了一下如何使用nginx 配置https证书,下面是整个的部署过程1.首先使用openssl生成相关的证书文件,这里就不再说明,百度上面有很详细的教程,经过这个步骤你会得到两个需要使用的文件我把这两个文件放在nginx的安装目录下面的ssl目录下面,这个你可以 自己指定,下面是核心的nginx配置文件的配置内容#user nobody...

2020-04-14 12:42:28 3797 1

原创 电商秒杀系统设计思路

所谓秒杀系统,众所周知秒杀的特点就是瞬间的访问流量很高,如果这些访问流量直接打到数据库的话,以数据库的瓶颈肯定会崩溃,所以关键是如何拦截无效的流量,这里分两大块,前端页面,后台服务器。一、前端1. 限流,点击提交按钮后通过js按钮置灰,显示为正在处理中,能处理结束或若干秒后,才允许用户点击2. 页面静态化,将商品详情页面做成静态页面,不经过后台的处理,直接返回3. CDN加速分流,将页...

2020-03-04 16:39:24 924

原创 源码解读Spring循环依赖如何解决

所谓的循环依赖就是在Spring IOC容器实例化对象的时候,有两个后者以上的对象互相依赖对方,持有对方的引用并且需要完成注入的情况,那么对于这种循环依赖,Spring是如何处理的呢,首先我在代码里面构建环境依赖package com.xp.config;import org.springframework.beans.factory.annotation.Autowired;impo...

2020-02-22 18:14:20 418

原创 mybatis源码分析

对于Java开发来说,mybatis对于我们是经常用到的,我们知道我们只要定义相应的接口,配置好扫包的路径,就会自动生成相关的接口实现代理类,那么mybatis是如何借助Spring完成这些操作的呢,在这里我就主要分享一下我在阅读了部分Mybatis源码后的一些总结package com.xp.config;import com.xp.dao.XXX;import org.mybati...

2020-02-19 10:16:44 197

原创 Spring生命周期的回调机制

根据Spring官网的介绍,Spring的生命周期回调包括两个部分,一,Bean的生命周期回调,二、整个容器的生命周期回调一、Bean的生命周期回调 Bean的生命周期回调实现的方式有三种,1、在一个方法上面加@PostConstruct;2、实现InitializingBean这个接口,并且实现这个接口提供的afterPropertiesSet方法;3、在xml里面配置一个init...

2020-02-15 10:14:31 416

原创 Spring的自动注入总结

相信一说到spring的自动注入作为Java程序员应该非常的熟悉,但是你对spring自动注入有没有深入的理解呢首先所谓的自动注入也可以称之为自动装配,spring除了自动装配,还可以手动装配,下面通过Xml来看看一个手动装配的例子吧package com.xp.service;public class HelloService { private ZullService ...

2020-02-14 19:09:06 668

原创 spring源码解读二

上一篇文章说到了生命周期的初始化refresh方法在refresh里面有如下方法,这里只讲关键的几个方法比如说invokeBeanFactoryPostProcessors和finishBeanFactoryInitializationprepareRefresh();// Tell the subclass to refresh the internal bean factory....

2020-02-09 08:57:22 253

原创 Spring源码解读一

本文是通过注解版的Ioc启动流程进行解读的AnnotationConfigApplicationContext content = new AnnotationConfigApplicationContext(AppConfig.class);一、通过AnnotationConfigApplicationContext的构造方法二、调用AnnotationConfiguUti...

2020-02-09 08:34:40 125

原创 分布式环境分布式锁的理解

在传统的单服务中,如何保证同一时间里面只有一个线程操作一段代码块,最简单的方法就用synchronized关键字,以及jdk自带的锁,但是如何在分布式项目里面,上述方案就不能适用了,synchronized是存在于jvm中的,当有多个实例的时候就不太适合了,这个时候分布式锁的方案就引入了。分布式锁常用的实现方案有基于redis和基于zoo如何保证同一时间里面只有一个线程操作一段代码块,最简单的...

2019-09-04 10:53:04 205 1

原创 自定义线程池的一些理解

ThreadPoolExecutor pool = new ThreadPoolExecutor(1//核心线程数量 , 3//最大线程数量 , 60//线程存活时间 , TimeUnit.SECONDS, new ArrayBlockingQueue<&g...

2019-07-31 08:45:05 257

原创 SpringBoot整合rabbitmq实现延迟消息

一,安装erlang环境rabbitmq是基于elarng语言二,安装rabbitmq环境请参考win10下安装rabbitmq三,安装rabbitmq_delayed_message_exchange插件插件下载地址http://www.rabbitmq.com/community-plugins.html(插件版本一定要和rabbitmq版本匹配上)下载完...

2019-03-29 14:31:51 673

原创 synchronized和lock的区别

1.synchronized是java内置的关键词,是基于jvm层面的,而lock是java类2.synchronized无法获取到锁的状态,而lock是可以获得锁的状态3.synchronized可以自动释放锁,而lock是需要在finally里面手动去释放锁,不然的话很容易产生死锁的情况4.用synchironized的两个线程1,2 当线程1获得锁,线程2释放锁,当线程1阻塞的话...

2019-03-13 16:30:25 197

原创 elementui el-dialog的一个小坑

&lt;el-dialog title="编辑库存" :visible.sync="dialogFormVisible"&gt; &lt;div style="border-bottom:1px solid #E6E6E6;width:100%;margin-top:-20px;"&gt;&lt;/div&gt; ...

2019-03-13 14:52:22 9482

原创 springboot聚合工程上传jar包到maven私服里面

第一步将需要打jar包的工程里面parent标签里面的version 改为 RELEASE 第二步将父工程的pom文件的版本改为RELEASE 第三部修改本地maven的settings配置文件增加如下配置 server里面是你自己搭建的maven私服的账号密码 第四步,cmd进入命令行  cd到工程路径下 执行 mvn deploy...

2019-01-11 02:38:55 2743

原创 利用docker搭建自己的gitlab

1.下载镜像文件(建议虚拟机的内存在2g以上)docker pull beginor/gitlab-ce:11.0.1-ce.02.创建GitLab 的配置 (etc) 、 日志 (log) 、数据 (data) 放到容器之外, 便于日后升级, 因此请先准备这三个目录(用户挂载配置文件到宿主机上面)。mkdir -p /mnt/gitlab/etcmkdir -p /mnt/git...

2019-01-06 12:18:46 272 1

原创 使用vue自定义组件实现树形列表

最近公司做新项目用的是vue,有一个功能做一个树形列表由于之前一直用的是jquery操作dom,刚接触vue走了不少弯路,特意写博客记录一下一、js自定义一个组件     &lt;script type="text/template" id="tpl"&gt;           &lt;ol class="dd-list" style="margin-left:60px;"&gt;

2018-09-27 19:49:18 9471

转载 linux环境安装fastdfs单机版

具体的安装步骤参考此链接 https://github.com/happyfish100/fastdfs/wiki

2018-09-16 18:48:58 478

原创 linu环境安装elasticseach6.4.0安装部署

一、首先从官网https://www.elastic.co/downloads,下载elasticsearch6.4.0版本gz压缩包二、利用相关xftp工具上传到linux对应的安装目录下面,这里以/usr/local/src下面,用命令tar -zxvf 解压出来 得到elasticsearch-6.4.0的文件夹,cd elasticsearch-6.4.0 ,进入到config里面修改...

2018-09-16 18:47:20 312

原创 poi通用导入excell工具类

 在对应的pom文件添加对应的maven依赖    &lt;dependency&gt;            &lt;groupId&gt;org.apache.poi&lt;/groupId&gt;            &lt;artifactId&gt;poi-ooxml&lt;/artifactId&gt;            &lt;version&gt;3.9&lt;...

2018-08-07 08:49:30 249

原创 springboot配置页面路径

springboot项目默认将加载页面路径是classpath下面的templates和static文件,如果你需要将路径修改的化,可以通过如下配置修改页面加载路径  @Configurationpublic class FreemakerConfig extends WebMvcConfigurerAdapter{      @Bean        public ViewRe...

2018-08-07 08:45:17 8298

原创 Solr的安装和配置

一、首先从官网上面下载对应的版本http://lucene.apache.org/solr/这里讲的是windows环境下载对应的zip包二、将下载下来的zip包解压到相应的目录里面三、打开cmd,切换到压缩包解压的的bin目录用命令行启动 solr start -p 8983 默认是这个端口四、创建对应的内核 对应命令行 bin/solr create –c mycore –p 8983五、提交...

2018-05-11 14:14:54 101

原创 linux环境部署两个WEB服务,使用不同的jdk版本

首先用root账户登录安装好jdk8配置好系统环境变量然后用root账户创建普通用户,此处省略如何创建普通用户,自行百度并切换到普通用户的当前文件夹目录下面安装jdk7和tomcat7配置好环境变量root用户配置jdk环境首先,通过指令     cd    /etc  进入到配置文件所在的文件夹中。然后,通过指令     vi     profile  用vim编辑器打开profile文件,进入...

2018-04-09 16:11:26 2728

空空如也

空空如也

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

TA关注的人

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