- 博客(45)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 SpringBoot学习示例—整合Redis之StringRedisTemplate及实现redis乐观锁,分布式锁、事务(附完整项目代码)
1. 前言 2. 整合Redis快速入门 3. StringRedisTemplate基本操作及测试 4. 实现Redis事务 5. Redis乐观锁(分布式锁) 1. 前言这篇文章你能学到,SpringBoot整合Redis的最简单方式,不需要任何复杂的配置。还有完整的乐观锁,分布式锁,事务等实现样例代码供你选择。2. 整合Redis快速入门SpringBoot项目引入redis依赖<!-- 引入 redis 依赖 -->&l..
2020-10-18 23:33:42
1888
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java架构师集锦(Github完整项目代码)——多数据源,读写分离,分布式事务,三种重试机制 及其原理和应用,幂等性,状态机机制替换大量的if/else代码等等
Java架构师方案—多数据源原理及应用(附完整项目代码)Java架构师方案—分布式事务2PC方案Atomikos(附完整项目代码)Java架构师方案—重试机制原理和应用,还有比这个讲的更好的吗(附完整项目代码)Java架构师方案—透彻理解「状态机」的全套机制 (附完整项目代码)Java架构师方案—状态机(附完整项目代码)...
2020-08-14 17:43:58
206
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java架构师方案—简单的邮件系统(附完整项目代码)
1. 邮件发送效果图 2. 邮件开发准备工作 3. springboot引入mail服务 4. 启动应用,开始4种邮件发送测试 1. 效果发送效果图连续发送了四封邮件:普通文本邮件,带附件的邮件,内容包含图片的邮件,发送html邮件。普通文本邮件截图带附件的邮件截图内容包含图片的邮件截图(图片太大,就截取一部分)发送html邮件截图2. 邮件开发准备工作引入pom文件依赖 <!-- 邮件 -->...
2020-05-30 23:16:59
2673
3
原创 Java架构师方案——模拟Spring Security,我徒手写了一个简单的安全框架(附完整项目代码)
1. 导读 2. 核心的组件和逻辑 3. 运行测试 4. Spring Security分析总结 1. 导读阅读这篇文章,跟着笔者一起从0到1开始写一个模拟Spring Security框架的工具。 读完文章,你将了解Spring Security核心原理。 本文demo是在Java架构师方案宝典系列中的jackdking-login-redis-token项目基础上衍生出来的。2. 核心的组件和逻辑在导读中,笔者说这篇文章demo是在jackdking..
2020-11-17 17:20:07
532
原创 SpringBoot学习示例—全面解析RedisTemplate配置及序列化、与StringRedisTemplate序列化区别(附完整项目代码)
1. RedisTemplate快速开发 2. 两种实例的redis数据序列化区别 3. 用RedisTemplate还是StringRedisTemplate 4. 总结 1. RedisTemplate快速开发spring-redis对redis的五种数据类型是支持的。这个几个数据操作对象在demo的RedisConfig类中配置了,具体可前去查看代码。本文最重要的点是Object的序列化,下文会着重分析。 HashOperations:对hash类型的数..
2020-11-17 11:43:05
1194
原创 SpringBoot学习示例—Redis多个实例简单的手动配置之整合Lettuce池(附完整项目代码)
1. Redis整合Lettuce池配置多个实例 2. 快速上手 3. 测试效果 1. Redis整合Lettuce池配置多个实例Redis 是目前业界使用最广泛的内存数据存储。相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets ,sortedsets等。数据库有分库分表,当然redis也能实现mysql一样的分库逻辑。本文介绍 Redis 在 Spring Boot 中分库的应用场景。2. 快速上手1、引入依...
2020-11-17 11:34:45
1141
2
原创 Java架构师方案——Spring Security(一)快速入门(附完整源码)
1. 导读 2. 快速认识Spring Security 3. 运行Spring Security项目 4. 架构师角色对web安全服务的理解 1. 导读1.读完这篇文章你将免费获得一个SpringSecurity测试demo项目源码(可直接运行)。2.你将学到如何快速创建一个SpringSecurity项目,实现简单的登入功能,很方便的集成到Springboot项目。3.查看demo项目的运行测试效果,更具体地了解SpringSecurity功能。。...
2020-11-17 11:06:43
414
原创 Mysql数据分片技术(一)——初识表分区
1. 为什么需要数据分片技术 2. 3种数据分片方式简述 3. 分片技术原理概述 4. 对单表分区的时机 1为什么需要数据分片技术数据库产品的市场在互联网行业内,绝大部分开发人员都会遇到数据表的性能问题,特别是当单表数据量特别大的时候,就算是添加索引,性能也都差强人意。对于亿级别的数据,有些大的企业会选择性能非常好的Oracle,Oracle属于中大型数据库,能在数据量大的情况下有好的数据处理性能。但是绝大部分小型企业是不会选择昂贵的oracle...
2020-09-18 10:34:07
744
原创 Mysql数据分片技术(二)——轻量分库分表框架Sharding-jdbc实例
1. 初识shardingJdbc 2. sharding-jdbc四种配置方式 3. YAML配置方式及mysql环境准备 4. sharding-jdbc分库分表实例测试 5. 轻量的sharding-jdbc在我目前工作项目的集成方案 1. 初识shardingJdbc定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各..
2020-09-18 10:33:11
588
原创 Java架构师方案—多数据源开发详解及原理(二)(附完整项目代码)
1. mybatis下数据源开发工作 2. 数据源与DAO的关系原理模型 3. 为什么要配置SqlSessionTemplate类的bean 4. 多数据源应用测试 1. mybatis下数据源开发工作在properties文件中配置两个数据库连接参数demo项目使用的是hikari数据源,配置 数据库地址,用户名,密码,数据库驱动等参数,在DataSource1Config类中通过@ConfigurationProperties(prefix = "sprin..
2020-09-18 10:18:09
539
原创 Java架构师方案—多数据源原理及应用(附完整项目代码)
1. 原生jdbc数据库开发 2. 数据源领域模型 3. 多数据源组件AbstractRoutingDataSource 4. 多数据源下读写分离应用 5. 聚合后台项目多数据源应用 6. 读写分离和不同业务数据源切换测试 读完本篇文章你将学到:原生jdbc开发流程,datasource数据源层,多数据源组件原理。以及它们三者之间的关系架构1. 原生jdbc数据库开发使用原生jdbc来访问数据库的流程为:Class.fo...
2020-08-16 23:50:10
1243
原创 Java架构师方案——重试机制原理和应用,还有比这个讲的更好的吗(附完整源码)
1. 理解重试机制2. 总结重试机制使用场景3. spring-retry重试组件4. 手写一个基于注解的重试组件5. 重试机制下会出现的问题6. 模板方法设计模式实现异步重试机制如果有,请转给我!理解重试机制“重试是为了提高成功的可能性“反过来理解,任何可能失败且允许重试操作的场景,就适合使用重试机制。但有了重试机制就一定能成功吗?显然不是。如果不成功就一直重试,这种处理方式会使得业务线程一直被重试占用,这样会导致服务的负载线程暴增直至服务宕机,因此需要限制重试次数。失败
2020-05-28 23:17:03
519
原创 Java架构师方案—透彻理解「状态机」的全套机制 (附完整源码)
消息传递事件监听多个以及多种状态机并存状态分支状态机工厂1. 消息传递状态机可以看成是一个控制中心,接受外部的事件信号进行状态转移,而状态转移也是在状态机初始化的时候就设置好了的。但实际业务中,我们不仅仅只是需要控制中心进行状态转移,还会需要进行一些业务的处理。状态机机制中的事件处理器执行相关业务逻辑,就会需要获得业务的数据,这时候触发事件时候就需要传递业务数据到处理器中,正好spring的状态机类statemachine提供了传递事件消息的api。如下图:SpringBoot系列—透彻.
2020-05-24 22:38:40
2258
原创 Java架构师方案——状态机(附完整源码)
1. 简单介绍状态机2. 状态机的本质3. 状态机应用场景简单介绍状态机状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。以上是百度百科对状态机的解释。在百科的解释中,我们可以提炼出状态机的几个要素:存储状态,逻辑电路,预先设定的状态转移路径,外部来的信号,内置的特定操作等。由这些关键要素我们可以推断出以下几点:状态数据有预先设定的多种值逻辑电路是完成内置特定操作的基础“代码“(基础设施),由工程司开发
2020-05-24 22:33:08
1881
原创 你看不起这个思维?可它一直在为你构造概念体系的大厦
共图社大白大白共图社Think different无论是在开发中,还是项目开始前的设计阶段,甚至是在读开源组件源码的时候,我们都会需要的java思维方式思维 一这个类(角色)的属性和行为是什么?它在整个体系中是个什么样的角色,承担着什么职责?而且更重要的思维是:它们有哪些内部联系?基于这种思维方式,我们在读源码的时候会从源码出发,构建这套源码的完成的机制中...
2019-12-11 14:25:45
211
原创 ThreadLocal专题(二)— 数据仓库机制
共图社大白大白共图社思维一,构建Thread数据仓库机制今天介绍的角色是线程的数据仓库群和仓库管理员:1.数据仓库管理人员:ThreadLocalMap 这个仓库管理员维护的属性:Entry数组 table,table数组的大小。仓库管理员的核心行为如图所示: 图中反馈的信息可以知道:仓库管...
2019-12-11 14:22:24
180
原创 工欲善其事,必先利其器
共图社scott大白共图社开发一个完整的商城系统,必然需要提升工作效率的工具,该篇文章介绍代码管理的工具git。对于刚接触git的人,git会有点陌生。git是个版本控制软件。何为版本控制?在我们开发过程中,面对需求的变更以及功能的优化,直接牵扯到的便是代码的变动,每一次变动后的代码相对之前都是一个新的版本,每个版本会记录代码变动相关的信息,方便日后的维护与管理,在每个版本的记...
2019-12-11 13:58:57
185
原创 读懂ThreadLocal
大白大白共图社5月30日还不懂ThreadLocal? 平常一些业务代码中经常会出现对JDK组件ThreadLocal的使用。那么对ThreadLocal的理解就显得刻不容缓了,那接下来我们要通过源码去剖析?还是要通过实例代码去分析? 答案:都不是。 读源码太枯燥,看实例又无趣。 那我们怎么去理解?用什么样的思维去读ThreadLocal?当...
2019-12-11 13:55:39
164
原创 ThreadLocal专题(一) -----告诉你我为什么是个打工仔?
共图社大白大白共图社5月30日 在上篇文章《读懂ThreadLocal》简单介绍了下有哪些角色,以及角色的定位,这篇文章将更加全面的介绍ThreadLocal为什么是个长工——苦逼的天生的打工仔。ThreadLocal的源码有的人看过,也有的人没有看过,但是说到上篇文章的思考方式:面向对象...
2019-12-11 13:53:28
149
原创 从Controller注解切入了解spring注解原理
Spring容器框架包org.springframework.stereotype下Controller注解接口源代码如下:@Target({java.lang.annotation.ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Contro...
2017-12-12 14:30:50
25422
原创 JDK源码分析--多线程同步工具CountDownLatch类
CountDownLatch类运用了java开发模式中的策略模式。对线程作用的是CountDownLatch类中的内部类Sync。Sync类继承了AbstractQueuedSynchronizer类,AbstractQueuedSynchronizer类是jdk多线程同步功能的重要类。CountDownLatch类有两个很重要的方法:await和countDown。这两个方法内分别调用的是A
2017-09-15 16:34:22
358
原创 注解anoation原理及自定义注解demo实现
在接触ssh框架的时候,我们都会看到框架对注解的广泛使用,如@Resource,@autowired,@component ,@controller等等,一开始的时候我们接触这些注解的时候都会有较大的疑虑,依照“知道源码知道一切”的思维我们肯定回去看这些源码,但是在观察源码之前,我们应该首先了解注解的实现原理,现在我们就实现一个自定义注解来进行探索。注解的自定义在Java 5中给出了4
2017-08-22 17:42:44
1354
1
原创 JDK源码分析之DelayQueue无边界阻塞队列类
DelayQueue类是一个无边界的阻塞队列类,线程安全类,它内部维护的是一个PriorityQueue类对象,PriorityQueue是一个无边界的队列类,但不是线程安全,即不会使用在阻塞队列使用的场景中。DelayQueue类的核心技术就是使用PriorityQueue类对象和同步处理工具ReentrantLock类和ConditionObject类,这两者的结合使得DelayQueue
2017-08-14 15:41:40
458
翻译 JDK源码分析之PriorityQueue类
/* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * *
2017-08-03 21:04:37
400
原创 JDK源码分析之主要阻塞队列实现类PriorityBlockingQueue
PriorityBlockingQueue类也是实现阻塞队列的一种工具类,同Array BlockingQueue类和LinkedBlockingQueue一样,最为消息中间件的实现类。同步线程之间的消息。如果要分析PriorityBlockingQueue就必须要看看PriorityQueue是如何实现的了。类PriorityQueue和类PriorityBlockingQueue都是用Ob
2017-08-03 20:58:45
243
原创 JDK源码分析之主要阻塞队列实现类LinkedBlockingQueue
LinkedBlockingQueue类的继承树:LinkedBlockingQueue 继承 AbstractQueue 继承 AbstractCollection 实现 CollectionLinkedBlockingQueue 实现 BlockingQueue 实现了Queue 实现了 Collection 由此可知类LinkedBlockingQueue的行
2017-08-02 23:15:48
354
原创 JDK源码分析之多线程同步锁ReentrantLock类源码的探索
Know the source , konw everything!想必大家和我一样,使用这些类的时候,如果只是知道如何使用这些工具类,那是远远不够的,你会压抑不住内心的躁动:对类的实现逻辑和设计模式以及源码一探究竟。就像拜读欧几里得的《几何原本》一样,不管多么困难的推论,只有分解成我所熟悉的定理和推论以及公理,并证明她是对的,那么这个推论对我来说这就是透明的了,不在像以前的黑盒子一样,那么这
2017-07-31 21:13:36
480
原创 JDK源码分析之主要阻塞队列实现类ArrayBlockingQueue -- java消息队列/java并发编程/阻塞队列
类源码将会在文章结束处给出,请读者对比分析;阻塞队列类常用语多线程的生产者-消费者模式,作为生产者和消费者的消息中间件使用,作为中间件就必须支持阻塞等待作用,在ArrayBlockingQueue 中使用的阻塞等待工具类是ReentrantLock 类,这个类的功能分析在博主的其他博客中已经通过源码分析的形式给出,请读者参考理解。首先我们看的是ArrayBlocking
2017-07-26 18:30:41
570
原创 spring Quartz 源码分析--触发器类SimpleTriggerBean源码剖析
上一篇我已经详细分析了CornTrigger类的源码,类的CronExpression 属性类完成了对定时任务设置的时间进行解析,而在SimpleTrigger类中,有下面SimpleTriggerBean类的源码可知,该类主要完成的工作是设置JobDetail和beanName这两个属性,现在我们主要分下这个类继承 的类SimpleTrigger类。package org.spr
2017-07-20 17:21:24
823
原创 spring Quartz 源码分析--触发器类CronTriggerBean源码剖析
前面我们讲到了Quartz框架在项目中的实现,在Quartz中的重要API有两个重要的触发器类:CronTrigger 和SimpleTrigger 在Quartz框架中这两个触发器都继承了一个抽象基类Trigger,这个类有触发器共有的属性name,jobName,group,jobGroup以及description;但是在spring框架中使用的触发器类是org.spring...
2017-07-19 17:33:19
2924
1
原创 spring容器框架定时任务实现的两种方式
spring容器框架自带一种定时任务 工具 spring Task 以及另外一种定时任务设置工具Quartz。spring Task 方式:这种定时方式其实是一种轻量的Quartz,这种方式有两种方法实现spring task的定时任务1. 注解形式直接在定时任务类上配置注解:@Component , @Scheduled(cron="*/1 * * *...
2017-07-05 14:46:35
2984
1
原创 spring框架—AOP编程的两种实现方式
spring框架—AOP编程的两种实现方式,一种是以注解的方式,另一种是在spring.xml文件中配置的方式。springnAop编程实现有两个工具,如下1.代理的使用,JDK自带的Proxy代理工具以及sping框架的cglib代理方式spring框架会根据代理对象的不同来自动选择使用哪一种代理方式:代理对象如果有实现的接口就用JDK的Proxy代理方式,代理对象如果没有接口则
2017-06-30 17:21:44
855
原创 最小公倍数和最大公约数方法
求最大共倍数和最小公约数的数学公式:a%b = mod 。 a和b的最大公约数与 b和mod的最大公约数是相等的。下面是java下的实现:public class MathUtil { /* * 最大公约数 */ public static int gcd(int a , int b){ int gcd = 1 ,max ,min,mod; max
2017-06-30 16:58:00
436
原创 简单排序算法时间空间复杂度分析及应用(8)-归并排序
归并排序采用的是分治的思想,先把数据集和分成两个子数据集合进行归并排序,然后将已经排好序的两个子序列合并成一个有序的数据集合,归并排序是一个非常稳定的排序算法。基本概念: 归并排序具体算法描述如下(递归版本): 1、Divide: 把长度为n的输入序列分成两个长度为n/2的子序列。 2、Conquer: 对这两个子序列分别采用归并排序。
2017-06-23 16:00:57
878
原创 简单排序算法时间空间复杂度分析及应用(7)-希尔排序
希尔排序,属于插入排序的一种,是直接插入排序的加强版。在希尔排序中引入了步长(gap)的概念,然而在插入排序中,步长默认为1。正如我们直接堆插入排序的分析,数据集合的排列顺序对插入排序的效率会由很大的影响,而且影响会很大。而希尔排序正是从这个方向对直接插入排序进行加强。 基本概念:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序...
2017-06-23 14:35:45
2467
原创 简单排序算法时间空间复杂度分析及应用(6)-鸡尾酒排序(双冒泡排序)
简单排序算法时间空间复杂度分析及应用(5)-鸡尾酒排序(双冒泡排序)顾名思义,鸡尾酒排序是属于冒泡排序的一种改进,从数据集合的两边进行冒泡排序,因此在排序过程中确定数据区域会有两个,分别在数据集合两边,中间为非确定数据区域基本概念: 1.双冒泡排序 ,外部循环的两个循环节点向两边靠拢p , q(p 2.两个同级别的内循环,分别以外循环的两个循环节点为循环终点(p+1
2017-06-23 13:02:49
1290
原创 简单排序算法时间空间复杂度分析及应用(5)-堆排序
简单排序算法时间空间复杂度分析及应用(5)-堆排序堆排序,属于选择排序的一种,两层嵌套循环,内循环结束后确定最大或最小的值,然后和外循环的节点交换值,待外循环结束后,整个数组排序完成。 在所有的排序算法中,核心问题是:循环体有几个?嵌套循环?外循环体的起始节点和最终节点?内循环的?算法的最初状态以及最终状态(包括确定区域,非确定区域,区元,循环节点位置)?算法单元操作(指:在每个
2017-06-21 16:38:31
420
原创 简单排序算法时间空间复杂度分析及应用(4)-二分插入排序
简单排序算法时间空间复杂度分析及应用(4)-二分插入排序 背景:顾名思义,这个二分插入排序是直接插入排序的进化版,主要变化的地方就是在内循环部分,即外循环的循环节点在确定区域的位置查询方式由原来的直接循环 比较变为二分法的方式来查询,在这确定区域数据都是已经排好序了的。 分析:这种插入排序属于插入排序中的先确定插入位置,后进行...
2017-06-20 15:53:03
2718
原创 SSH框架常用的一些菜单处理架构整理(前端)。
SSH框架常用的一些菜单模块前端生成方式。 菜单无论在哪一个系统中都是存在,但是随着前端框架的不同,菜单的实现也是完全不一样的,当你开始一个项目系统构建时,最开始就是搭建好系统的菜单模块 使用OGNL表达式和struts2标签方式搭建菜单模块,struts2标签格式: 菜单的搭建需要在登入的时候
2017-06-16 17:16:44
1283
原创 简单排序算法时间空间复杂度分析及应用(3)-快速排序
简单排序算法时间空间复杂度分析及应用(3)-快速排序和之前的两种算法比较: 1.快速算法适合在n值(排序规模比较大)较大的场景下使用,快速排序算法时间会少一点。 2.冒泡排序和插入排序适合n值较小的场景下使用,如果待排序区并不是都杂乱无序,即有些区域是有序 的,使用冒泡排序和插入排序比较好一点。 3.快速排序适合用在次序分布随机的场景下应用。
2017-04-26 00:38:46
901
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人