自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 基于领域驱动设计和maven spring的模块化开发的实践

简介基于领域驱动设计(DDD)开发的项目,它具有代码层次分明,业务更好的贴合业务,使代码的可维护性和可读性大大提高等优点,而MAVEN和Spring天生就是为模块化而设计开发的,最近结合之前的DDD使用经验,结合使用MAVEN和Spring对项目的模块化进行一次实践。代码地址:https://github.com/liushprofessor/ddd_module为什么要模块化和为什么需要微服务之前本人参与过的项目中有些采用了SpringCloud全家桶对项目进行微服务化,但是经过一番实践后发现大

2020-10-17 23:24:06 541 2

原创 手把手在小项目中实践领域驱动设计(含详细代码和实践过程)

前言前面已经简介过领域驱动的基本概念,前文介绍的COLA框架在大型项目或者微服务架构中目测有较好的实践,但是对于一个中小项目或者小公司来说管理大量依赖包模块简直就是噩梦,或者就是项目达不到那种规模,采用分包模式也是一种浪费,但是采用领域驱动设计在本人实践过程中确实大大提升了代码质量,最主要的改善就是使开发人员不再以数据库驱动开发,而是真正的开始从业务和领域入手,这样开发出的代码往往能更好的实现...

2019-09-06 11:51:09 2842 4

原创 关于一次服务优化的总结和思考

简介最近业务上线已经有一段时间了,在这期间业务的流量逐渐上升,由刚开始时几乎忽略不计的并发流量,上升到平均每秒6M左右,高峰期可达20M,在排除掉一些其他数据的流量后,真实入库的数据平均在2M,高峰期在8M左右,在这期间系统出现了一些并发问题,这里对排查方法和自己对优化方面的思考做了一些总结。系统架构和业务系统是一个物联网平台,主要的就是对硬件设备进行管理,和收集硬件所产生的数据,并且存储入库。目前系统有800多个设备实时的产生数据,每个设备0.2s-1s产生一条测试数据(下面称作测试数据),每条测试

2022-03-18 15:37:51 609

原创 Spring循环依赖和的源码分析

Spring循环依赖和的源码分析简介循环依赖并不是一个好的设置,现实代码中很多离奇问题都由循环依赖导致(如死锁等),但是Spring是如何解决这部分问题的呢?答案是利用了Java的特性,同一个对象的应用指向的是同一个类,这样就能在类还在实例化阶段,还没对值进行赋值阶段就创建一个早期实例化对象,依赖对象去持有这个临时对象的引用,在依赖对象完全初始化后,由于持有对象是拥有者依赖对象的同一个引用,这样就能完成循环依赖的操作,现实中循环依赖并不是一个好的模式,我也会在现实中去避免去使用,就如之前介绍的六边形架构

2021-12-22 17:02:06 226

原创 泛型在代码设计中的思考

泛型在代码设计中的思考简介最近查看了Hibernate Validator泛型的使用和认知有了新的理解,这里结合自己的理解做一个总结。JAVA 的类型 ┌────┐ │Type│ └────┘ ▲ │ ┌────────────┬────────┴─────────┬

2021-11-24 14:15:19 119

原创 Mybatis Spring核心源码分析

##### 简介在最开始接触Mybatis之前就好奇Mybatis是如何将我们执行我们定义的接口?其如何和我们编写的xml关联起来,最近又带着这个疑问分析了一下Mybatis Spring的源码,发现其核心也不复杂就是java 的动态代理。##### 配置入口依旧是老套路,我们先从入口分析,Mybatis需要使用@Mapper注解来在Spring中注册,我们只需要全局搜索看在哪里调用打@Mapper即可,在MybatisAutoConfiguration中找到了内部类以下方法```pub.

2021-10-11 16:12:51 109

原创 从源码分析Spring Bean定义和Bean实例化的生命周期

##### 简介最近空闲重新学习了一下Spring,之前只知道ApplicationContext和BeanFactory都是Spring的容器,且ApplicationContext对BeanFactory做了增强,当时其具体的实现不了解,知道最近在自己突发奇想,想使用BeanFactory去读取注解(@Bean)定义的类时才从源码中了解到相关内容,其是本质就是对BeanPostProcessor和BeanFactoryPostProcessor的分析。##### 核心定义Spring的对..

2021-10-11 16:11:49 97

原创 大流量下物联网数据校验实践

#### 简介最近项目中遇到一个问题,服务器使用tcp与电池检测设备相连,电池检测设备挂载了大量的通道,这些通道会产生电池检测数据(平均1秒产生一条数据,一条数据平均130字节,最快100毫秒产生一条数据),一个测试流程可连续运行几天置一年不等,那么服务端如何检验这些设备发送的检测数据是否有漏发丢发或者是重复发送?第一解决方案就是将这些数据存储在数据库中,每次上传数据的时候去数据库中查询这些数据是不是已经发送过,但是一个测试数据可能有百万甚至上千万条,且在上千个通道并发运行的情况下如果将这些数据全部存在

2021-07-20 17:08:47 193 1

原创 cas单点退出和自定义验证登录成功后返回的信息

简介项目中使用的CAS后续需要外部系统的接入,这里需要解决两个问题,1:单点登出问题,之前的文章中提到各个接入cas的应用在验证st时会获取到用户信息,然后将用户信息做缓存,下次再次访问这个子应用时就不需要再向cas去获取是否登录,那么这就存在一个问题,CAS已经退出登录,但是各个子应用仍然保存着登录状态,这就导致了用户仍然可以访问子应用。第二个问题,由于在验证st时,cas会返回用户信息,但是cas默认返回的信息有并不能满足项目需求,有些是多余的,还有一些自定义的用户信息并没有返回,这里也需要对信息做重

2020-07-24 18:51:31 2810 2

原创 关于钉钉在外网故障情况下仍然能发送消息的思考

简介前段时间公司外网发生故障,外网无法访问,但是钉钉发送消息却不受影响,却仍然可以收发,当时感觉不可思议,结合最近学习的网络知识,这里做一下分析和总结必要知识公有地址和私有地址如果我们运行ipconfig查看本机的ip地址我们会发现ip地址大多数都是已192.168.x.x开头的,但是如果我们去百度查找我们的ip地址却和我们ipconfig查找的ip地址不一样,这时因为公网使用的公有地址...

2020-05-06 10:15:27 961

原创 CAS客户端集成gateway

简介CAS提供的客户端是基于Servlet写的,也就是说我们如果使用非Servlet应用,那么客户端是无法继承的,项目中使用没有使用Zuul来作为网关,而是使用Gateway,所以我们需要将原有的逻辑迁移到Gateway上实现思路根据查询原有客户端我们可以发现,客户端本质是一些Servlet拦截器,在拦截器中对登录和验证进行各种逻辑,而Gateway也提供了拦截器GlobalFilter,所...

2020-03-04 11:36:12 5687 7

原创 CAS 自定义登录的代码改写和部分主要逻辑解析

原文发在本人博客上https://liushaohuang.cn/2020/01/20/CAS-%E8%87%AA%E5%AE%9A%E4%B9%89%E7%99%BB%E5%BD%95/#more简介CAS提供了单点登录服务功能,但是默认只使用账号密码登录,在现实项目中往往需要添加各种验证因子比如短信和验证码等,通过对源码的跟踪和分析这边简介一下CAS登录验证逻辑的大致流程和如何定制登录代码...

2020-01-20 16:46:31 3726 1

原创 Mybatis缓存和应用

一级缓存 会话基本 mybatis对应sqlsession 二级缓存 应用基本,不同会话也可访问 mybatis对应namespace 三级缓存 跨jvm 如redis spring事务有四个等级,在mysql inndbn内核中默认采用可重复读(两个事务同时处理一条数据 一个事务更新了,在另一个事务中读取到的仍然是旧的值),mybatis中有一级缓存,如果事务等级低于可重复读 ...

2019-06-18 16:06:13 158

原创 Activiti6 Spring的加载

最近在使用Acticiti6时一直怀疑Activiti6是怎么样和Spring做整合的,以下是通过查看源码得到的思路通过查看官网文档发现其初始化的核心是ProcessEngine类,于是我们在activiti-spring包中全局搜索,发现在资源目录下查找到配置文件,里面Spring初始化的xml,主要的配置如下进入ProcessEngineFactoryBean,发现其是通过...

2019-05-27 16:12:34 465

原创 Hive单机模式搭建

Hive是一个数据仓库工具,主要用来做离线分析,将hdfs的命令转换成日常使用的sql命令,hive需要一个数据库存储元数据这里用的是mysql 首先安装mysql https://blog.csdn.net/qq_23167527/article/details/85236999创建数据库create database hive; 下载hive,这里下载的是2...

2019-04-02 16:37:30 950

原创 Hbase单节点搭建

基于上文Hadoop单节点搭建开始搭建Hbase首先下载和hadoop对应的hbase版本不同版本可能存在不兼容的情况https://blog.csdn.net/saga_gallon/article/details/83616031我这里下载的HBase是1.2.11 hadoop是2.7.6Hbase依赖zookeeper如果集群中已经有Zookeeper可以选择接入集群,在...

2019-04-02 15:21:55 457

原创 Spark基于yarn做资源管理的单机模式搭建

Spark是一个分布式计算框架,将其和hadoop的yarn结合可以很好的将其和hadoop结合 起来来代替MapReduce来做分布式计算 基于上一节单机hadoop的搭建继续按照Spark export SCALA_HOME=/liu/scala/scala-2.10.4 export PATH=$PATH:$SCALA_...

2019-04-02 14:35:46 535

原创 Hadoop单机模式搭建

首先下载Hadoop,我这里下载的是2.7.6版本,持行tar -xvzf 目录 解压文件设置免密登录 $ sudo apt-get install ssh $ sudo apt-get install rsync生成秘钥 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa $ cat ~/.ssh/id_rsa.pub >&g...

2019-04-01 11:53:31 340

原创 activiti6教程四

本节将结合官方绘图工具和API进行一次整合首先绘制流程图如下图中${pass==1}和${pass==0}为网关执行条件,当pass==1时候执行t2任务当pass==0时t4路线,设置方法为点击那条连接线,选择Flow condition输入${pass==1},那么在后续中只要我们将activiti中改变pass的变量的值就能控制流程的走向设置messa...

2019-03-19 12:42:08 1004 1

原创 Activiti6教程三

这一节主要介绍Activiti中API中的一些名词官方文档简介中主要包含以下几个API这几个接口的用处已经介绍的很清楚了,但是使用这些API我们必须要了解到activiti的一些定义,我们结合流程图来说,我们定义一个业务流程 我们查看API时会发现很多接口都需要传入processInstanceId 比如RumtimeService下addParticipant...

2019-03-18 17:53:14 1151

原创 Activiti6教程二

基于上一节,登录activiti-app工程http://localhost:8080/activiti-app/进入首页如下得到3个模块 第一个模块主要是画图模块,用来配置,维护和部署流程,可以理解为该模块是一个后台管理端。activiti其实最核心的功能就是将我们从各种流程的状态中解脱出来,你可以假设一下,如果没有开源的工作流引擎你会怎么去实现一个流程?一般人的想法就...

2019-03-18 17:28:45 948

原创 Activiti6教程一

准备步骤1:下载代码https://github.com/Activiti/Activiti/tree/6.x 将modules目录里的代码逐个编译到maven本地仓库 重点注意如下项目,此项目为activiti一个编辑器的demo,包含了一些工作流的大致工程,可参照其去实现自己的工作流模块坑:activiti在maven中央仓库中提供了一个pom依赖...

2019-03-18 16:02:05 1456

空空如也

空空如也

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

TA关注的人

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