自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 CAS Server Restful接口实现后台认证

接口参数说明接口说明使用PathVariable接收参数,参数为ST票据。用于校验ST票据状态使用PathVariable接收参数,参数为TGT;以及需要service作为表单参数使用application/x-www-form-urlencoded形式传递即可。用于生成ST票据与CAS Server的UsernamePasswordCredential参数有关,默认为username和password参数,使用application/x-www-form-urlencoded形式传参。

2024-06-10 19:12:12 962

原创 CAS Client使用以及执行原理

以上为CAS Client的主要流程;在开发过程中大多数都是使用的Spring Boot作为业务开发框架,如果仅仅自己手动配置的CAS Client的话确实有点不和事宜,在CAS官方也提供了自动配置的依赖,目前找到了两种自动配置的依赖:Unicon网址提供的CAS Client自动配置,该依赖很久没有更新了。CAS官方提供的,分为Spring Boot 2.x以及3.x版本。两者代码几乎是一致的,参数配置的话均可以根据CasClientConfigurationProperties进行配置即可。

2024-04-21 22:33:32 1348

原创 CAS Server使用Maven构建以及自定义扩展使用

本文主要阐述CAS Server服务端Maven构建以及自定义扩展使用。对于CAS Server的执行流程以及原理本文就不详细概述了。在实际开发情况中,我们需要对CAS Server做一些自定义扩展,便于解决一些实际问题;官方提供了多种使用以及扩展方式,例如:使用或者进行第三方扩展;但是都是使用Gradle进行集成以及使用Tomcat容器单独部署,在一些特定的开发场景下会比较麻烦。目前就阐述一下在开发过程中可能存在的一些扩展功能。

2024-04-06 17:08:20 1217 4

原创 零拷贝技术原理与使用

上下文切换(context-switch)指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换。上下文切换过程中的信息被保存在进程控制块(PCB-Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中,直到被再次使用。进程上下文切换线程上下文切换中断上下文切换。

2023-07-09 23:20:49 414

原创 高版本SpringBoot兼容低版本ElasticSearch解决方案

由于公司最近需要接入日志数据,然而日志数据在ElasticSearch(版本为 6.8.23)里面,但是接入数据项目使用的是Spring Boot 2.4.x版本,根据Spring Data官方提供的版本对应,明显对应不上,官方文档地址:Spring Data Elasticsearch - Reference Documentation2021.2 (Raj)4.4.x7.17.95.3.x2.7.x2021.1 (Q)4.3.x7.15.25.3.x2.6.x2021.0 (Pascal)4.2.x[1

2023-04-19 23:49:53 6201 2

原创 ElasticSearch 7 入门使用教程

执行如下命令:安装JDK并查看JDK版本。

2023-04-16 16:02:53 1379

原创 通过代理模式 + 责任链模式实现对目标执行方法拦截和增强功能

最近需要实现一个插件功能,但是如果做成两个接口的话(即执行前和执行后),那么会降低插件的可玩性,所以需做成类似AOP的环绕通知形式,所以就使用到了责任链模式和代理模式进行实现。...

2022-06-30 22:09:06 402

原创 Java并发编程之synchronized关键字解析

前言公司加班太狠了,都没啥时间充电,这周终于结束了。这次整理了Java并发编程里面的synchronized关键字,又称为隐式锁,与JUC包中的Lock显示锁相对应;这个关键字从Java诞生开始就有,称之为重量级锁,自从JDK1.6之后官方对该关键字进行优化,引入了轻量级锁和偏向锁,于是就有了锁升级的概念。使用在代码中使用这个关键字总共有以下三种: private static Object object = new Object(); private syn...

2022-03-13 17:37:54 571

原创 SpringBoot自定义Starter(自动配置类)

前言SpringBoot其实从诞生以来围绕的核心就是快速构建项目,快速构建的前提是有人帮你做好轮子,开发者只要拿来即用就好了,而造好轮子的人就是SpringBoot的开发者,引入自动配置的形式帮助开发者快速创建项目,而自动配置采用的是一种starter模块形式,比如web模块就引入spring-boot-starter-web。而且SpringBoot依旧支持第三方组件融入到SpringBoot的生态圈中,比如Mybatis的组件模块名:mybatis-spring-boot-starter。今天就来分

2021-11-21 18:11:16 1742

原创 SpringBoot自动配置原理流程

前言新公司太忙了,都没啥空更新博客,就随便记录一下以前的学习笔记吧。SpringBoot是基于Spring上的衍生框架,只要看懂了Spring的话,学这个就比较简单了;SpringBoot也是在当前微服务时代下流行的框架,并且该框架采用了自动配置,所以只要简单的配置一下就可以直接使用了,省去了很多做配置的时间,可以说是开箱即用。当前SpringBoot版本号为2.1.15.RELEASE版本使用SpringBoot这个可以借鉴一下官网:快速创建SpringBootInitializer我们.

2021-10-31 21:46:46 211

原创 Maven高级之archetype(原型/骨架)开发

前言archetype这个的主要功能就是将写好的项目模块打包成一个原型,然后提供给其他人使用,这样别人就可以快速使用这个项目模板了。这个东西虽然很多人都基本用不上,但原型这个东西用的好还是很方便的,能够在开发新项目上省去大量时间,自定义原型比上篇博客中的插件在使用方式上还简单一点。使用原型在使用管理工具创建项目的时候,用的最多的就是一下两种原型了然后单击下一步,输入groupId和artifactId以及version然后就等待开发工具创建好即可,现在这里就不使用开发工具去创建项目了

2021-09-20 21:53:37 856

原创 Maven高级之插件开发

前言终于来到了Maven的插件开发,其实Maven的插件并没有想象的那么难,刚开始讲Maven基础的时候就演示了一下JDK是如何打包的,Maven打包只是在JDK打包上封装了一层而已,Maven也支持自定义插件开发创建我们先使用quickstart原型创建出一个Maven项目,在pom.xml里面引入一下依赖:<dependency> <groupId>org.apache.maven</groupId> <artifactId>

2021-09-19 21:21:10 617

原创 Maven之pom.xml常用标签解析及镜像配置

前言Maven仅仅是个打包工具而已,个人觉得没有太大必要花费在打包工具上,这里就列举一下常用标签的使用就好了,原理啥的基本就不太会去深度了解了,如果以后遇到了需了解Maven工作原理的工作的话,到时候一定分享出来。pom结构前面那篇博客已经展示过了,这里就在展示一下parent标签这个标签用的最多是在使用Spring Boot项目以及父子项目的用的最多,SpringBoot示例:<parent> <groupId>org.springframewo

2021-09-17 20:44:14 1443

原创 Maven基础及概念

概念Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。Maven 的主要目的是为开发者提供一个可复用、可维

2021-09-09 19:31:47 162 1

原创 ThreadLocal原理解析以及是否需要调用remove方法

平常的开发过程中,如果有个类不是线程安全的,比如SimpleDateFormat,要使这个类在并发的过程中是线程安全的,那么可以将变量设置位局部变量,不过存在的问题就是频繁的创建对象,对性能和资源会有一定降低和消耗;那么这里就可以用到ThreadLocal作为线程隔离,那么ThreadLocal是如何实现线程与线程之间隔离的呢,待会儿会在下文进行讲解。之前有篇使用ThreadLocal做线程之间的隔离实例,大家可以参考一下:使用ThreadLocal实现Mybatis多数据源在了解ThreadLoc

2021-08-27 11:16:42 2733

原创 Zookeeper基础常用操作以及ACL权限

这次将Zookeeper的一些基础用法以及权限这块的都补充一下在这篇博客中。上篇博客介绍了基于ZooKeeper实现的分布式锁,也介绍了一些ZooKeeper的节点类型以及监听机制,今天这里就不作过多的介绍了,大家也可以自行的去官方文档上看看更具体的介绍ZooKeeper官方链接会话会话(session)是zookepper非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关,客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输:看下这图,Z.

2021-08-14 17:06:41 1783

原创 基于Zookeeper使用ZkClient实现分布式锁

有段时间没写博客了,在整理之前写过的一套自定义框架,并且整理好上传值github上了,也有一些新功能还在开发,欢迎大家使用:一个好用的Http接口请求工具组件可能今天这篇文章跟之前的比有些跳跃性,一下子就谈到了Zookeeper了,不过也没关系啦,先谈谈最常用,然后在慢慢看Zooeeper的其他知识。简单介绍ZooKeeper致力于提供一个高性能、高可用,且具备严格的顺序访问控制能力的分布式协调服务,是雅虎公司创建,是Google的Chubby一个开源的实现,也是Hadoop和Hbase的重要组

2021-07-20 00:22:10 597 5

原创 Spring集成Mybatis多数据源配置

既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧。Spring集成Mybatis在之前就已经提到了。Spring集成Mybatis集成Mybatis多数据源有两种方式:1、创建多个SqlSessionFactory,扫描每个SqlSessionFactoryBean对应的包,形成了每个Factory对应一个数据源。2、创建一个SqlSessionFactory,通过动态切换数据源对象,达到多数据源操作功能。第一种方式通过在Spring的配置文件中配置多个SqlSes

2021-06-28 16:13:38 1720

原创 Mybatis源码之插件模块分析

总结完这个Mybatis的整体主要功能基本上就差不多完,还有一些细节的部分,后续都会记录补充。插件这个东西一般用的比较少,就算用的多的插件也算是PageHelper分页插件;PageHelper官网:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md官网上这个也有谈到Mybatis的插件流程分析。使用示例插件类记录SQL执行的时间,1、在JDK8之前必须实现Interceptor接口中

2021-06-14 16:02:05 151

原创 Mybatis源码之与Spring集成包

这次讲讲Mybatis与Spring的整合,作为两款优秀的开源框架,被大众广泛使用,自然是需要强强联合的。使用示例先看一下怎么使用,首先需要引用这两款框架的jar包:<dependency> //spring-webmvc会自动去引入其他Spring的核心包 <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <

2021-06-13 18:51:57 331

原创 Mybatis源码之核心流程分析

终于谈到了Mybatis最核心的东西了,最核心的就是通过配置XML文件或注解中的SQL,直接调用接口就能执行配置好的SQL语句并封装成对应的返回类型的数据。先看一下Mybatis使用示例://创建Builder对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//读取配置文件IO流InputStream is = Resources.getResourceAsStream("mybatis/mybatis-

2021-06-12 15:33:59 234 5

原创 Mybatis源码之缓存模块分析

缓存这个东西在很多应用中都能看到它们的身影,这次就讲讲在Mybatis中的缓存是怎么应用的,虽然说吧Mybatis中的缓存基本不怎么用,用的更多是第三方组件redis、MongoDB、MemCache等等。Mybatis的缓存是基于Map实现的,从缓存中读写数据是缓存模块的核心功能,但是除了这个功能Mybatis也提供了很多附加功能,比如防止缓存击穿、添加缓存清空策略等等,并且这些附加的功能属性可以随意组合到核心功能上。缓存在Mybatis中的使用介绍Myabtis中有两个缓存,一级缓存以及二级

2021-06-07 19:46:26 162 3

原创 Mybatis源码之数据源模块分析

先来看看java纯jdbc查询数据的示例:try { //加载对应的驱动类 Class.forName("com.mysql.cj.jdbc.Driver"); //创建连接 Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC", "root", "root123"); String sql = "select * from

2021-06-06 13:06:02 219

原创 Mybatis源码日志模块分析

看源码需要先下载源码,可以去Mybatis的github上的仓库进行下载,Mybatis这次就先整理一下日志这一块的源码分析,这块相对来说比较简单。之前的文章有谈到过Java的日志实现,大家也可以参考一下:日志实现以及使用...

2021-06-02 14:14:39 269 2

转载 Mybatis配置文件参数定义

大家也可以上官网看,官方文档

2021-06-01 13:55:43 835

原创 MongoDB位运算基本使用以及位运算应用场景

在MongDB的V3.2版本以后才支持的位运算,在这个版本之前是不支持,所以想要用位运算,需先将MongoDB的版本升级至V3.2说明在官方文档中共支持四种&位运算条件$bitsAllClear 所有指定二进制的位数都为0 $bitsAllSet 所有指定二进制的位数都为1 $bitsAnyClear 任意一位指定二进制的位数为0 $bitsAnySet 任意一位指定二进制的位数为1 这个指定的位数是不是有点难以理解例如255这个数字的二进制有

2021-05-19 17:06:28 1713 1

原创 Spring AOP两种使用方式以及如何使用解析

AOP是一种面向切面编程思想,也是面向对象设计(OOP)的一种延伸。在Spring实现AOP有两种实现方式,一种是采用JDK动态代理实现,另外一种就是采用CGLIB代理实现,Spring是如何实现的在上篇已经讲到了Spring Bean的生命周期以及IOC源码解析AOP可以做日志记录,或者事务回滚,在Spring的事务使用就是通过AOP进行事务的回滚的JDK动态代理这个是属于JDK提供的一种代理方式,需提供接口才能使用,主要用的类有两个:1、Proxy:这个主要是生成接口代理对象;2、Inv

2021-05-07 13:57:57 305 1

原创 Spring Bean的生命周期以及IOC源码解析

IOC源码这一块太多只能讲个大概吧,建议还是去买本Spring IOC源码解析的书来看比较好,我也是自己看源代码以及视频整理的笔记Bean的生命周期大概可以分为四个阶段,具体的等会再说,先看看IOC的源码吧1、bean的创建2、bean的属性赋值3、bean的初始化4、bean的销毁IOC容器源码解析我们创建容器以newAnnotationConfigApplicationContext(Config.class)为示例,我们点开源代码,看一下其实做了挺多事的,在父类的.

2021-05-05 15:40:22 168

原创 Spring的组件赋值以及环境属性@PropertySource

@PropertySource将指定类路径下的.properties一些配置加载到Spring当中,有个跟这个差不多的注解@PropertySources@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface PropertySources { PropertySource[] value();}使用方式,在@Configuration上面加上这个即可,不

2021-05-02 16:11:36 266

原创 Spring中Aware的用法以及实现

Aware在Spring当中有一些内置的对象是未开放给我们使用的,例如Spring的上下文ApplicationContext、环境属性Environment,BeanFactory等等其他的一些内置对象,而在我们可以通过实现对应的Aware接口去拿到我们想要的一些属性,一般命名都是xxxAware,在创建对象的时候, 会调用接口规定的方法注入到相关组件:Aware常用的Aware:用法示例:源码解析我们先了解什么是BeanPostProcessor,是在创建Bean之前以及创建

2021-05-02 15:20:50 5003 2

原创 Spring中BeanFactory和FactoryBean的区别

先介绍一下Spring的IOC容器到底是个什么东西,都说是一个控制反转的容器,将对象的控制权交给IOC容器,其实在看了源代码之后,就会发现IOC容器只是一个存储单例的一个ConcurrentHashMap<String, BeanDefinition>BeanDefinition只是一个将Object包装的对象,带有实例的其他属性,比如对应的Class等,而Spring默认创建的IOC容器为newDefaultListableBeanFactory(),可以看一下这个对象的属性 /*.

2021-05-02 11:23:00 187

原创 Spring IOC容器组件注入的几种方式

整理一下之前Spring的学习笔记,大致有一下几种Spring注入到容器中的方法:1)、配置在xml的方式。2)、开启包扫描@ComponentScan使用@Component,@Service,@Controller,@Repository(其实后三个都继承@Component)注册组件到spring容器里面3)、使用@Bean注入4)、使用@Import快速导入组件@Configuration​ 声明为配置类,与bean.xml一致XML方式注入Sping最开始的用法,先

2021-05-02 00:20:14 562

原创 Java并发编程之线程定时器ScheduledThreadPoolExecutor解析

定时器就是需要周期性的执行任务,也叫调度任务,在JDK中有个类Timer是支持周期性执行,但是这个类不建议使用了。ScheduledThreadPoolExecutor继承自ThreadPoolExecutor线程池,在Executors默认创建了两种:newSingleThreadScheduledExecutor:只包含一个线程,只需要单个线程执行周期任务,保证顺序的执行各个任务。newScheduledThreadPool: 可以包含多个线程的,线程执行周期任务,适度控制后台线程数

2021-05-01 14:07:33 3042

原创 Java并发编程之线程池ThreadPoolExecutor解析

线程池存在的意义平常使用线程即new Thread()然后调用start()方法去启动这个线程,但是在频繁的业务情况下如果在生产环境大量的创建Thread对象是则会浪费资源,不仅增加GC回收压力,并且还浪费了时间,创建线程是需要花时间的;线程池的存在就是降低频繁的创建线程,降低资源的消耗以及创建时间的浪费,并且可以同一管理。ThreadPoolExecutor在JDK中所有的线程池的父类就是ThreadPoolExecutor,以下是它的构造方法 /** * Creat

2021-05-01 10:58:29 253

原创 Java并发编程之堵塞队列介绍以及SkipList(跳表)

堵塞队列先了解一下生产者消费者模式:生产者就是生产数据的一方,消费者就是消费数据的另一方。在多线程开发中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这种生产消费能力不均衡的问题,便有了生产者和消费者模式。生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题,即有了MQ(Message Queue)中间件。生产者和消费者彼此之间不直接通信,而是通过阻塞队列来进行通

2021-04-30 22:23:41 372 1

原创 Java并发编程之并发容器ConcurrentHashMap(JDK1.8)解析

这个版本ConcurrentHashMap难度提升了很多,就简单的谈一下常用的方法就好了主要数据结构1.8将Segment取消了,保留了table数组的形式,但是不在以HashEntry纯链表的形式储存数据了,采用了链表+红黑树的形式储存数据;在使用get()方法时,使用纯链表的时间复杂度时O(n),而在使用红黑树的数据结构时,时间复杂度为O(logn),在查询的速度上有很大的提升;但是在创建的时候并非直接使用红黑树储存数据,而是依旧采用链表存储,但是但链表的长度超过8的时候就会转换成红黑树数据结构

2021-04-27 14:29:05 287

原创 Java并发编程之并发容器ConcurrentHashMap(JDK1.7)解析

最近看了一下ConcurrentHashMap的相关代码,感觉JDK1.7和JDK1.8差别挺大的,这次先看下JDK1.7是怎么实现的吧哈希(hash)先了解一下啥是哈希(网上有很多介绍),是一种散列函数,简单来说就是将输入值转换为固定值的一种压缩映射,在Java中最常见的就是Object.hashCode(),通过固定算法计算出来的一个值...

2021-04-18 21:55:57 179

原创 Java并发编程之FutureTask源码解析

上次总结一下AQS的一些相关知识,这次总结了一下FutureTask的东西,相对于AQS来说简单好多呀之前提到过一个LockSupport的工具类,也了解一下这个工具类的用法,这里也巩固一下吧 /** * Makes available the permit for the given thread, if it * was not already available. If the thread was blocked on * {@code park} t

2021-04-09 13:32:04 206

原创 Java并发编程之AbstractQueuedSynchronizer(AQS)源码解析

自己一个人随便看看源码学习的心得,分享一下啦,不过我觉得还是建议去买本Java并发编程的书来看会比较好点,毕竟个人的理解有限嘛,好啦进入整体啦。独占锁和共享锁首先先引入这两个锁的概念:独占锁即同一时刻只有一个线程才能获取到锁,Lock的实现类中ReentrantLock和WriteLock就是独占锁,所以独占锁也叫排它锁;共享锁是同一时刻多线程能获取到的锁叫共享锁,即ReadLock;在读写锁共有的情况下,会出现共存的情况即读-读共存,读-写、写-写不能共存,他们会产生互斥。数据结构.

2021-04-08 16:34:14 374 7

原创 Java并发编程之显式锁(Lock)使用

又是一个基于AQS好用的类,看来下次有必要看看AQS了,正好又是放假。既然叫显式锁,必然也有隐式锁,也就是所谓的synchronzied关键字,它们两者的区别呢在于使用范围,synchronzied关键字的使用范围比Lock要小,在Lock的实现类中与synchronzied相近似的类叫ReentrantLock,也叫可重入锁,待会儿在说看看Lock吧Lock是一个接口,主要的实现类有三个 ReadLock(写锁),WriteLock(读锁),ReentrantLock(可重入锁)核心方法:

2021-04-04 11:33:44 459

mybatis连接Oracle所用的jar包

mybatis框架开发所用的jar ,该压缩包内含有两个jar包,一个是框架必须,另外一个是Oracle连接所用的jar包

2018-09-03

空空如也

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

TA关注的人

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