- 博客(32)
- 收藏
- 关注
原创 docker下搭建redis集群
准备好Linux系统机器,并安装好docker,阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。学习docker基础知识可以参考这篇博文安装好并启动docker后就可以开始搭建redis了本篇文章我们安装redis6.0.6版本,执行以下命令直接下载redis6.0.6版本镜像安装好后再执行 docker images命令,查看到redis6.0.6镜像则安装成功安装好redis镜像后,此时redis还只是单体,我们需要搭建集群,集群配置如下:回到linux,
2022-12-04 22:14:24 6082 9
原创 SpringBoot自定义参数解析器同时支持json,form表单,拼接在uri的多种传参方式
一个http请求中有多种入参方式,比如json串,form表单,还有参数拼接在uri等。在SpringBoot里,一个接口接收什么类型参数都有对应实现方式,比如用@RequestBody注解修饰的形参接收json入参,但不能接收其他类型的入参,否则会报Unsupported Media Type错误。如果项目里要求实现一个接口能接收多种入参该如何实现?...
2022-08-10 22:48:31 1285
原创 docker下安装mysql5.7教程
准备好Linux系统机器,并安装好docker,阅读这篇文章前请先了解清楚docker的基本知识并且会熟悉运用docker的常用命令。学习docker基础知识可以参考安装好并启动docker后就可以开始安装mysql了。
2022-07-31 23:36:39 18447 2
原创 ReentrantLock源码下深入分析AQS原理
AQS全称是AbstractQueuedSynchronizer,它是一个抽象类,内部实现了一个FIFO双向链表,链表的每一个节点都有一个指向前节点和一个指向后节点的指针,所以AQS可以从任意一个节点很快访问前驱和后继,每个节点绑定一个线程,当线程竞争锁失败时,会添加到队列的尾部等待被释放,当锁被释放时,队列头部节点的线程会被释放去竞争锁ReentrantLock是Lock接口的实现类,它是常用的对象同步锁,并且它是可重入锁,重入锁指的是线程在获得锁之后,再次获取该锁不需要阻塞,而是直接关联一次计数器增加重
2022-06-30 21:30:57 264
原创 CAS原理详解
CAS全称是Compare And Swap,它的实现和它的字面意思一样,先比较后交换,它是CPU硬件层面的一种指令,从CPU层面能保证"比较并更新"这一段操作的原子性。与synchronized关键字比较不同是synchronized是一种悲观锁,CAS是一种乐观锁。CAS有三个操作数,内存值V,旧的预期值A,要修改的更新值B,当A和V相同时将V修改成B,否则一直比较V和的值直至A和V相同为止,使用java代码大致实现逻辑如下:value使用volatile修饰,保证了该变量的有序性和可见性,comp
2022-06-17 22:50:37 2816
原创 Springboot整合POI实现到处Excel报表示例
一、POI介绍具体介绍可以这篇文章https://blog.csdn.net/w893932747/article/details/89354979二、POI实现导出示例我们写一个springboot项目整合poi导出excel文件的接口例子1. 环境准备先准备好一个springboot项目工程,我这就不举例子了在springboot工程下引入poi依赖,这里以3.17版本为例<dependency> <groupId>org.apache.poi<
2022-05-27 21:05:44 495
原创 SpringCloud整合nacos配置中心并配置nacos权限
1. 环境准备springcloud版本需要与springboot版本兼容,否则无法运行;nacos是springcloud alibaba旗下的,版本对应与原生态的springcloud有所不同本文所举的例子版本如下springcloud:Hoxton.SR9springcloud alibaba:2.2.3.RELEASEspringboot:2.3.5.RELEASEnacos:2.2.3.RELEASE在springcloud项目工程里引入以下依赖 <dependencyM
2022-05-03 20:04:19 7779 1
原创 SpringBoot + Mybatis集成多种数据库(mysql + oracle)
最近工作中,项目需要切换数据库,但是由于原来数据量比较大,且数据更新频繁,所以计划先采用双数据库(mysql + oracle)的方式保证项目正常运行,今天就分享一下Springboot项目如何集成 mysql + oracle1. 环境准备引入数据库依赖(可以根据数据库版本选择依赖版本)<dependencies> <!-- jdbc驱动 --> <dependency> <groupId>org.springfram
2022-04-12 22:32:19 2847 4
转载 9千字长文带你了解SpringBoot启动过程--史上最详细 SpringBoot启动流程-图文并茂
来自面试官发自内审深处的灵魂拷问:“说一下springboot的启动流程”;一脸懵逼的面试者:“它简化了spring的配置,主要是因为有自动装配的功能,并且可以直接启动,因为它内嵌了tomcat容器”;面试官:“嗯, 没错,这是 它的一些概念,你还没回答我的问题,它是怎么启动的,启懂时都经过了哪些东西?”;一脸懵逼的面试者:“额~~~不知道额····,我用的很熟练,但是不知道它里面做了哪些事情!”;面试官:“了解内部原理是为了帮助我们做扩展,同时也是验证了一个人的学习能力,如果你想让自己的职业道路.
2022-04-09 10:53:06 50208 18
原创 Linux(CentOS7)下搭建redis集群,多台机器一主二从
1. 环境准备Linux系统:CentOS7-2009三台主机:192.168.64.70 端口7000-7002192.168.64.71 端口7000-7002192.168.64.72 端口7000-7002redis:redis-5.0.13redis下载地址:http://download.redis.io/releases/
2022-04-01 19:23:19 2390
原创 Linux(CentOS7)下搭建elasticsearch集群,超详细
最近工作项目引入了的elasticsearch数据库,我被分配了搭建elasticsearch环境,本篇文章就来介绍如何搭建nacos集群1. 环境准备Linux系统:CentOS7-2009三台主机:192.168.64.70192.168.64.71192.168.64.72elasticsearch:elasticsearch-7.6.2JDK:JDK1.8(ES需要依赖JDK1.8以上版本运行,安装ES前请确认机器安装好了JDK1.8以上)elasticsearch下载地址:h
2022-01-28 22:38:25 2725
原创 Linux(CentOS7)下搭建nacos集群,超详细
最近工作接手一个调整项目框架的活,我被分配到搭建nacos注册中心的工作;nacos注册中心是alibaba旗下的一个开源组件,它提供了SpringCloud alibaba 微服务架构的注册中心以及配置中心功能,并且提供了比较直观的可视化界面;本篇文章就来介绍如何搭建nacos集群1. 环境准备Linux系统:CentOS7-2009三台主机:192.168.64.70192.168.64.71192.168.64.72nacos:nacos-2.0.2MySQL:MySQL8.0.1
2022-01-22 20:50:31 2469
原创 Linux(CentOS7)下MySQL8.0安装教程 --超详细
1. 下载MySQLmysql官网下载地址:https://downloads.mysql.com/archives/community/版本选择Linux-Generic下mysql-8.0.15 (x86 64-bit)版本2. 导入MySQL安装包到linux系统我们把下载好的mysql安装包导入到linux系统下,这里以CentOS-7-2009 linux系统下的 /usr/local/ 路径为例子:#解压tar -xvf mysql-8.0.15-linux-glibc2.12
2022-01-09 16:37:37 2671 1
原创 SpringBoot自定义参数解析器HandlerMethodArgumentResolver应用详解
前言在Spring三大框架Controller层中,经常可以看到@RequestParam,@PathVariable,@RequestBody等注解实现自动封装入参,这些都是通过Spring MVC框架提供的参数解析器HandlerMethodArgumentResolver接口实现的,本篇文章将会介绍参数解析器HandlerMethodArgumentResolver的应用HandlerMethodArgumentResolver解析我们来看看HandlerMethodArgumentResol
2022-01-08 12:53:26 2111
转载 Springboot过滤器和拦截器的区别
上两篇文章我们介绍了过滤器Filter和拦截器Intercepter,其功能都是对请求进行拦截并对请求过滤,本篇文章就介绍一下两者的区别1. 过滤器和拦截器的区别过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。拦截器可以获取IOC容器中的各个bean,而过滤器就不行,因为拦截器是spring提供并管理的,spring的功能可以被拦截器使用,在拦截器里注入一个service,可以调用业务逻辑
2021-12-30 22:18:34 5513 1
原创 SpringBoot自定义拦截器interceptor使用详解
上一篇文章我们介绍了过滤器Filter使用详解,Filter是依赖于Servlet,即Filter生命周期由Servlet容器管理,这篇文章我们介绍一个可以存在于Servlet以外的也具有过滤功能的组件——由Spring提供的Interceptor拦截器;拦截器主要应用在日志记录,权限校验等安全管理方面比较多Spring Boot拦截器Intercepter详解创建自定义拦截器实现HandlerInterceptor接口,并按照自定义要求重写指定方法需要一个配置类实现WebMvcConfigure
2021-12-26 19:13:49 6670
原创 SpringBoot自定义过滤器Filter使用详解
JavaWeb组件Servlet提供了filter过滤功能,其功能是对目标资源的请求和响应进行拦截,对拦截到的请求和响应做出特殊的功能处理,比如我们请求中有一些敏感信息过滤就是利用过滤器过滤1. Filter的原理Java Servlet API中提供了Filter接口,编写Filter的实现类,从而实现自定义过滤器。Filter的请求流程为:客户端发起请求服务容器判断当前请求资源是否有过滤器,有则执行过滤器过滤器过滤通过后请求到Servlet服务器返回结果通过过滤器返回给请求方Filt
2021-12-20 20:29:27 10102 1
原创 Spring AOP原理——动态代理解析及简单使用
在 Java 中,动态代理是一个很常用的功能,虽然说一般不需要自己直接去用,但是了解它们是怎么回事还是很有必要的。这篇博客的主要内容便是 JDK 动态代理和 CGLIB 动态代理的简单使用和理解。JDK 动态代理JDK 动态代理依赖于 接口 来确定它需要代理的方法,使用时可以分为以下几个角色:TargetInterfaces - 需要代理的目标接口(们),JDK 动态代理将会为这些接口的方法调用创建代理TargetObject - 实现了目标接口的对象 InvocationHandler -
2021-12-11 13:38:05 470
原创 SpringBoot自动装配原理解析——面试可以这样会回答
1. 前言SpringBoot是目前软件中最主流的框架,无论是工作还是面试基本都有它的身影,SpringBoot主要解决了传统spring的重量级xml配置Bean,实现了自动装配;所以,我们也常在面试中被问到SpringBoot是如何实现自动装配。本篇文章会从springboot源码进行自动装配的原理解析,并总结面试如何简洁的描述2. 源码解析我们以springboot 2.2.5.RELEASE版本进行解析2.1 @SpringBootApplication源码解析先看看springboo
2021-11-28 16:27:50 20150 2
原创 Springboot框架自动装配原理之@Import注解作用
1. 简介在平时看源码或者很多配置类上面都会出现@Import注解,功能就是和Spring XML 里面 的 一样. @Import注解是用来导入配置类或者一些需要前置加载的类.,springboot框架实现自动装配的原理之一正是利用这一特性解决了spring框架中重量级的xml配置2. 源码解析@Import注解源码以及源码描述的翻译/** - Indicates one or more <em>component classes</em> to import &
2021-11-20 20:29:57 1571
原创 MySql语句优化总结以及解析验证,超详细(二)
接着上一篇,上篇主要分享了sql优化的技巧,这些在我们平时写sql养成这样的习惯即可,当我们需要对慢sql分析的时候,我们要如何sql语句判断是否命中索引以及执行过程中那部分瓶颈?答案是使用sql执行计划分析,这里利用mysql的关键字explain来实现1. sql执行计划执行计划简单来说就是把sql在数据库中执行的一步一步的过程的信息列出来,在mysql中使用explain关键字查看sql执行计划例如:查询SELECT good_id,good_code,title,sku_title,su
2021-11-01 08:32:03 218
原创 MySql语句优化总结以及解析验证,超详细(一)
我们使用以下表作为来作为sql优化的验证:CREATE TABLE `good` ( `good_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品id', `good_code` varchar(30) NOT NULL COMMENT '商品编码', `title` varchar(100) DEFAULT NULL COMMENT '标题', `sku_title` varchar(256) DEFAULT NULL COMMENT
2021-10-21 22:28:07 231
原创 深入解析mysql索引加速查询原理及优化策略
关于sql优化,我们可以发现很多资料以及大佬们的优化经验都会涉及到索引,那么mysql索引是什么?索引是如何优化查询的?这篇文章会详细的讲述索引的分类常见的索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引主键索引:根据主键建立索引,每个主键默认会建立主键索引,不允许重复,不允许空值;唯一索引:用来建立索引的列的值必须是唯一的,允许空值普通索引:用表中的普通列构建的索引,没有任何限制全文索引:用大文本对象的列构建的索引(不常用,本文暂时不讲)组合索引:用多个列组合构建的索引,这多个
2021-08-22 16:34:57 616
原创 浅析java设计模式之单例模式
单例模式顾名思义就是只含有一个实例,一个实例复用,达到减少创建对象的开销以及大大节省资源的效果,是java23种设计模式最简单应用最多的设计模式;单例模式的实现方法主要分为饿汉式和懒汉式两大类,饿汉式public class SimpleInstance { public static SimpleInstance simpleInstance = new SimpleInstance(); private SimpleInstance() {} public static
2021-08-14 16:33:44 269
原创 java关键字volatile详解
1. java并发编程之可见性可见性的定义是指一个线程对共享变量的修改,另一个线程能够立马看到,但是再任何情况下都是可见的吗?我们来看下面这段代码public class VolatileDemo { private static Boolean FLAG = true; public static void main(String[] args) throws InterruptedException { System.out.println("main thread
2021-08-08 13:23:31 782
原创 java线程池原理详解
概述在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源,创建线程亦是如此,这导致在高并发中效率低下并且资源耗费严重,因此,池化资源技术应运而生,所以就有了线程池。Executors类JDK为我们封装了一套操作多线程的框架Executors,常用的方法如下:newSingleThreadExecutor:创建一个单线程的线程池,这个线程池有且只有一个线程在工作newFixedThreadPool:创建固定大小的线程池,通过带参数创建指定线程数大小,每提
2021-08-01 22:32:30 279
原创 Spring AOP 切面(Aspect)应用详解
1. AOP 切面应用下面是一个AOP切面的一个简单的应用实例引入AOP依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>创建切面类对象@Aspect@Componentpublic class ItemCach
2021-06-12 22:52:01 2345
原创 spring事务为何失效?正确的spring事务使用方式
概述我们知道spring事务分声明式事务和编程式事务;编程式事务是由用户手动去开启事务并手动提交或回滚,一般不用,声明式事务是由用户将一段业务逻辑声明为事务,由spring容器代理完成,用spring事务注解@Transactional即可声明,但是事务注解@Transactional使用不当会使事务失效,下面我们就来盘点spring声明式事务的正确使用方式定义一个controller,并注入service来调用事务方法@Controller@RequestMapping("brand")pub
2021-06-08 22:41:41 173
原创 Java IO字节流与字符流读写文件
字节流读写文件字节流是将文件以二进制字节码的形式读写,每次读取指定多少个字节,所以字节流可以处理任何类型文件(包括图片,avi等),下面是字节流常用常用的一种用法字节输入流:package com.cy;import org.junit.Test;import java.io.*;public class StreamDemo { @Test public void testInputStream() throws IOException { String
2021-05-25 22:25:16 266
原创 synchronized的各种场景用法详解
概述synchronized是java的关键字,它的作用是加同步锁,即被synchronized修饰的部分同一时间只允许一个线程访问,它的使用场景有如下几种:修饰普通方法:对当前对象实例加锁,调用该方法需要获得当前对象实例的锁修饰静态方法:对当前类加锁,会对该类的所有实例加锁,因为静态方法不属于任何一个实例对 象,是属于类成员。所以当线程A访问调用一个实例对象的synchronized方法,线程B调用这个实例对象的静态synchronized方法是允许的修饰代码块:对指定的对象加锁,可以指定变
2021-05-15 23:46:33 2519
原创 java反射运用基础,超详细
概述Reflection(反射) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,也有称作“自省”。反射非常强大,它甚至能直接操作程序的私有属性。我们前面学习都有一个概念,private的只能类内部访问,外部是不行的,但这个规定被反射赤裸裸的打破了。反射就像一面镜子,它可以在运行时获取一个类的所有信息,可以获取到任何定义的信息(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。反射运用基础基础测试类package c
2021-05-09 14:44:17 142
原创 Java集合类详解
这里写自定义目录标题Java集合详解新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Java集合详解你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细
2021-04-18 18:49:44 143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人