自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 7.微服务设计原则

从单体应用向微服务演进策略: 绞杀者策略,修缮者策略的另起炉灶策略;

2023-12-26 09:53:00 385

原创 6.微前端设计

这种架构模式是微服务架构理念在前端领域的延伸,旨在将单体前端应用分解为松耦合且独立的小应用后,再根据实际的业务场景将这些小应用组装成单个解决特定业务场景的应用;

2023-12-26 09:45:25 92

原创 5.微服务代码模型

在微服务代码模型里,我们分别定义了用户接口层、并分别为它们建立了interfaces、application、domain和infrastructure四个一级代码目录;

2023-12-26 09:42:10 601

原创 4.中台领域建模

参与者领域专家,事件风暴的其他参与者可以是DDD专家、架构师、产品经理、项目经理、开发人员和测试人员等项目团队成员;准备的材料事件风暴的场地事件风暴的关注点某些业务动作或行为(事件)是否会触发下一个业务动作,这个动作(领域事件)的输人和输出是什么?是谁(实体)发出的什么动作(命令),触发了这个动作(事件)等;微服务设计和开发时,要时时刻刻想着微服务的架构演进,与生俱来就需要考虑聚合的解辗利未来聚合的重组,做到未雨绸缨;

2023-11-21 14:51:54 111

原创 3.DDD基本原理

DDD核心知识体系有: 领域、子域、核心子域、通用子域、支撑子域、限界上下文、实体、值对象、聚合和聚合根、领域事件、领域服务、应用服务和分层架构等;

2023-11-21 14:50:04 264

原创 2.认识中台

中台是企业级能力复用平台;中台首先体现的是一种企业级的能力,它提供的是一套企业级的整体解决方案,解决小到企业、集团,大到生态圈的能力共享、业务联通和融合的问题,支持业务和商业模式创新。通过平台联通、业务和数据融合,为前台用户提供一致体验,更敏捷地支撑前台一线业务;对前台业务的快速响应能力;企业级的复用能力;从前台、中台到后台的设计、研发、页面操作、流程、服务和数据的无缝联通、融合能力;业务中台解决企业业务能力可用和复用的问题,而数据中台则通过数据智能化解决业务能力如何用好的问题;

2023-11-17 11:02:44 103

原创 1.数字化转型概述

AKF可扩展能力立方体模型的x、y、Z轴代表的三个维度相辅相成,涵盖业务和技术的多个领域;通过克隆应用和数据库实例,可以提高应用和数据库的业务承载容量,对应x轴扩展能力;通过划分业务职能边界建立领域模型,以拆分应用和设计微服务,可以提高业务的复用和扩展能力,对应Y轴扩展能力;通过分片策略将数据集拆分为多个数据子集或业务单元,可以提高数据的扩展能力,对应Z轴扩展能力;企业将多个不同维度的扩展能力融合在一起,就可以实现应用能力的无限扩展了;

2023-11-17 11:01:52 75

原创 3.springboot创建代理

本文介绍配置切面后,动态代理创建器自动创建动态代理的过程。

2023-11-01 13:59:02 385

原创 2.springboot代理调用

本文介绍在方法上开启声明式事务@Transactional后(使用InfrastructureAdvisorAutoProxyCreator创建jdk动态代理),springboot的调用该方法的过程;

2023-09-28 14:15:16 328

原创 1.springboot开启代理

springboot声明式事务是通过动态代理实现的,本文通过@EnableTransactionManagement做为入口,跟踪spring代理的开启过程;

2023-09-28 14:14:09 1369

原创 springboot-方法处理4-消息转换器

本文介绍消息转换器HttpMessageConverter;

2022-09-30 11:39:38 2645 1

原创 springboot-方法处理3-返回值处理器

1.返回值处理器简介上一篇章稍微研究了参数解析器(HandlerMethodArgumentResolver),本篇稍微研究返回值处理器(HandlerMethodReturnValueHandler)。返回值处理器主要用于根据目标方法的返回类型描述(比如参数类型/方法的注解),把返回值写入到各种http对象中(比如response/session);1.1.类结构1.2.功能说明(重点)名称以ReturnValueHandler结尾的是单一的返回值处理器,名称以MethodProcessor结尾

2022-04-22 17:30:02 1598

原创 springboot-方法处理2-参数解析器

1.参数解析器简介上一篇章稍微研究了方法处理器(HandlerMethod),本篇稍微研究参数解析器(HandlerMethodArgumentResolver)。参数解析器主要用于根据目标方法的参数描述(比如参数类型/参数名/注解),从各种http对象(比如request/session/header)中获取参数值;1.1.类结构1.2.功能说明(重点)名称以ReturnValueHandler结尾的是单一的参数解析器,名称以MethodProcessor结尾的既是参数解析器,也是返回值处理器;

2022-04-22 17:29:25 1645

原创 springboot-方法处理1-方法处理器

1.问题接上回研究全局异常处理器的过程中,发现spring是通过参数解析器(HandlerMethodArgumentResolver)解析全局异常处理器的参数的。本文稍微研究一下参数解析器;2.调用过程调用全局异常处理方法的过程分为如下三步。本文主要研究方法处理器(HandlerMethod),后续两篇研究参数解析器(HandlerMethodArgumentResolver)和返回值处理器(HandlerMethodReturnValueHandler)创建方法处理器(HandlerMetho

2022-04-22 17:27:34 784

原创 springboot-全局异常处理器

1.问题在进行日志记录的时候,使用了filter过滤器。想当然的认为在过滤器中捕捉到所有异常,然后记录日志。结果是发生异常后,过滤器中无法捕捉到,异常已经被其它程序捕捉。到底是为什么了,于是本人稍微探究了一下这个过程;2.简介2.1.http请求的调用过程2.2.全局异常处理器结构2.3.运行过程说明项目启动,spring加载全局异常处理器http请求,被filter拦截,调用filterChain.dofilter(),经过一系统的过滤器链。最后达到spring的DispatcherS

2021-12-23 09:19:43 3606

原创 框架解析2.源码-登录认证

1.概述本文主要阅读理解登录模块的源码;2.主要流程用户发起请求到app,SsoTokenFilter过滤器拦截请求,根据header的sso-sessionid判断用户是否登录:如果没有登录,则重定向到sso服务的登录接口;如果已经登录,获取x-user-token添加到header;ExtraParamInterceptor拦截请求,获取用户信息数据,保存到线程中(ExtraParamUtil.extraParamLocal[TransmittableThreadLocal]);a

2021-11-19 10:47:56 693

原创 2.devops-sonar安装

1.目标安装sonar社区版8.9.1,并与gitlab集成,进行代码检查;2.安装步骤2.1.创建数据挂载目录mkdir -p /data/sonar#**第三方扩展插件mkdir /data/sonar/extensions#**数据文件,比如es(sonarqube依赖,官方镜像中内置es)mkdir /data/sonar/data#**日志文件mkdir /data/sonar/logs2.2.安装sonarsonar新版不支持mysql,需要依赖postgresql数据

2021-07-09 14:24:05 218

原创 1.devops-gitlab runner安装

1.概述本文介绍使用gitabl runner安装和部署;2.环境安装2.1.gitlabgitlab安装就不介绍了,各位自行了解;2.2.gitlab runner简介gitlab runner是gitlab ci脚本的执行器,分为两种类型:Shared Runner:所有工程共用,只有系统管理员可以创建;Specific Runner:在指定的工程使用,该工程的管理员可以创建;安装gitlab-runner#**安装gitlab-runneryum install gitla

2021-07-09 14:20:16 272 5

原创 3.springboot-@Autowired和@Value工作原理

1.简介A.名词说明spring bean生命周期复合构造函数(synthetic):由编译器引入的构造函数,主要用于JVM内部使用;桥接方法(bridge):由编译器引入的方法,主要用于JVM内部使用;B.@Autowired与@Value功能@Autowired与@Value功能基本相同,都可以自动装配bean;@Value除了可以自动装配bean外,还可以自动装配配置参数。装配配置参数时,也可以配置参数写在方法上;@Componentpublic class MyAutowi

2020-11-18 11:34:31 1000

原创 2.springboot-实现自动化配置的方法(springboot starter工作原理)

1.概述springboot项目可通过配置文件进行一些参数配置,如数据库连接,redis连接等。在application.yml中配置这些参数后,参数就会自动生效,本文解析springboot如何实现自动化配置;一般情况下,每个种类的配置文件都会有对应的java配置类与之对应。如数据库连接配置,与之对应的是DataSourceProperties类。ide可直接通过点击配置文件链接到对应的java配置类;配置文件的加载可解析为两步。一是读取配置文件中的数据并绑定到java配置类,二是加载java配置

2020-11-04 09:55:55 484

原创 1.springboot-启用自动化配置工作原理

1.启用自动化配置在springboot中使用@EnableAutoConfiguration注解开启,而@EnableAutoConfiguration集成在了@SpringBootApplication中,所以springboot项目中不需要显示配置@EnableAutoConfiguration,默认开启了自动化配置;@EnableAutoConfiguration集成了@AutoConfigurationPackage,收集spring扫描的包名;@EnableAutoConfigurati

2020-10-12 10:02:35 710

原创 3.java模块化-示例

1.java本地应用1.1.创建模块化项目创建项目创建一个java项目(非maven项目),然后分别创建两个模块module1和module2,并分别添加模块声明文件(module-info)项目结构如下:module1的module-info.java//**module1命名为cn.pings.moduleamodule cn.pings.modulea { }module2的module-info.java//**module1命名为cn.pings.modulebmod

2020-09-19 09:29:08 926 2

原创 2.java模块化-基础

1.模块化解决的问题可靠的配置模块必须声明对其他模块的显式依赖。 模块系统验证程序开发的所有阶段的依赖关系—编译时,链接时和运行时。强封装模块必须明确声明其中哪些公共类型可以被其他模块访问。Java 9中的公共类型并不意味着程序的所有部分都可以访问它。模块化JDK/JRE使用jlink(JDK9的jlink工具)创建应用程序的自定义运行时映像,其中仅包含应用程序中使用的模块。2.java平台的模块标准模块以Java 为前缀。比如java.base,java.sql。非

2020-09-19 09:28:11 378

原创 1.java9-11新特性

1.性能提升每次JDK版本升级JVM速度都会有一定的提升,jdk9-11 JVM的性能提升主要体现在垃圾回收;垃圾收集器:java8默认的配置为UseParallelGC。虚拟机运行在Server模式下的默认值。使用Parallel Scavenge + Serial Old的收集器组合进行内存回收。有很多项目会使用UseConeMarkSweepGC。使用ParNew + CMS + Serial Old的收集器组合进行内存回收。Serial Old收集器将作为CMS收集器出现Concurrent

2020-09-15 12:04:15 504

原创 8.springboot cache代理类

1.spring cache代理类简介结构2.spring cache代理类源码解读2.1.缓存切面(PointCut)作用根据缓存注解生成一个切面,如果条件匹配会进行拦截;抽象类CacheOperationSourcePointcutabstract class CacheOperationSourcePointcut extends StaticMethodMatcherPointcut implements Serializable { //**使用CacheOperatio

2020-09-10 15:39:38 834

原创 7.springboot cache基础类

1.spring cache基础类简介1.1.结构1.2.运行过程简要说明使用:在User类上编写方法String getName(),标注注解@Cacheable;运行过程拦截:拦截器拦截标注有@Cacheable的getName方法,调用父类CacheAspectSupport的execute方法执行;解析缓存注解:使用AnnotationCacheOperationSource,AnnotationCacheOperationSource委托SpringCacheAnno

2020-09-07 09:16:55 1638 1

原创 6.springboot cache启用

1.启用缓存在springboot中使用@EnableCaching注解开启,导入CachingConfigurationSelector;CachingConfigurationSelector根据EnableCaching注解的AdviceMode参数,导入对应的bean;如果是PROXY代理模式,则导入AutoProxyRegistrar、ProxyCachingConfiguration。如果有jsr107的接口定义和具体实现,则额外导入ProxyJCacheConfiguration;

2020-09-01 16:47:57 618

原创 springboot-Import注解

1.作用通常需要与自定义注解和一些Import接口(ImportSelector、ImportBeanDefinitionRegistrar和ImportAware)配合一起使用。在Import接口获取自定义注解中的参数并导入相关bean;2. 示例:EnableCaching注解:使用Import注解导入CachingConfigurationSelector;//**导入AsyncConfigurationSelector@Import(CachingConfigurationSele

2020-08-05 10:22:16 788

原创 springboot-bean生命周期

1.spring bean生命周期2.Aware接口2.1.作用一个标记,标记在spring容器初始化时需要获取上下文中当前的一些运行环境;2.2.常用接口ApplicationContextAware:获取ApplicationContext spring上下文;ApplicationEventPublisherAware:获取ApplicationEventPublisher事件发布器;BeanClassLoaderAware:获取当前的ClassLoader类加载器;BeanFac

2020-08-04 10:08:14 1868

原创 springboot-EnableXX启用配置

启用配置1.功能在springboot中使用@EnableXXX注解开启某项功能;常用的包括:@EnableCaching:启用缓存@EnableAsync:启用异步调用@EnableScheduling:启用定时任务@EnableTransactionManagement:启用事务2.原理2.1.说明使用@EnableXXX注解,相当于在spring上下文环境中导入一些java bean;可参考@EnableCaching和CachingConfigurationSele

2020-07-22 13:55:25 1101

原创 5.springboot cache和cacheManager下

1.spring cache解析1.1.RedisCache和RedisCacheManager1.1.1.结构1.1.2.解析RedisCache使用RedisCacheWriter接口,用于对redis的读写;RedisCacheWriterRedisCacheWriter和Cache接口的差异:所有方法都需要指定name,执行redis命令时如需加锁,name为锁的key;RedisCacheWriter可根据正则清除缓存;public interface Redi

2020-06-12 09:02:27 866

原创 4.springboot cache和cacheManager上

1.spring cache简介spring对各种缓存技术进行了封装(包括concurrentMap,redis,guava,caffeine,jCache,ehCache等等),并提供一致的对外接口;包括CacheManager和Cache两个接口,Cache接口包含缓存的各种操作,CacheManager接口则负责管理Cache;CacheManager会持有多个Cache实例的引用,根据name区分;Cache接口包含一些简单的缓存操作,功能没有redisTemplate强大;可使用

2020-06-09 10:20:43 1506

原创 3.springboot redis序列化器

1.redis序列化器作用在保存数据时需要把java对象序列化为byte,在读取数据时需要把byte反序列化为java对象;不同的java数据类型序列化和反序列化的逻辑不一样;java对象序列化后的文本格式不一样。常见的有java对象字节码、json字符串,xml字符串;spring把上述逻辑封闭在redis序列化器中,接口为RedisSerializer;2.redis序列化器结构3.序列化器解析3.1.RedisSerializer接口提供了序列化serialize和反序列化de

2020-05-27 17:39:13 1776

原创 2.springboot redisTemplate序列化与反序列化

1.序列化与反序列化1、序列化和反序列化简介:序列化就是指把对象转换为字节码;对象传递和保存时,保证对象的完整性和可传递性。把对象转换为有字节码,以便在网络上传输或保存在本地文件中;反序列化就是指把字节码恢复为对象;根据字节流中保存的对象状态及描述信息,通过反序列化重建对象;2.redis序列化与反序列化redis底层以二进制/字符串形式存储内容;序列化把java对象转换为二进制/字符串,然后存储到内存中;反序列化读取内存中的二进制/字符串,然后转换为java

2020-05-13 17:45:03 5635

原创 1.springboot redis简介

1.Redis简介Redis是一个高性能的key-value内存数据库,支持持久化,可将数据保存在磁盘,重启时加载;Redis是单线程模型,所有操作都是原子性的。单个操作是原子性的,多个操作也支持事务;Redis单机支持多个数据库,每个数据库的数据是隔离的。数据库从0开始的递增数字命名,默认支持16个数据库。集群没有数据库的概念;2.Redis数据类型string(字符串)has...

2020-04-29 18:46:24 861

原创 pingssys-springboot+dubbo+mybatisplus数据过滤

1.问题本人在为pingss-sys脚手架(项目地址)编写WMS(仓库管理系统)时,遇到如下需求:一个库有很多仓库,每个仓库也有很多客户。当用户选择某个仓库登录后,就只能操作这个仓库的数据,而某个客户所属的用户登录后,也只能操作这个客户的数据,这就需要在操作数据时对数据进行过滤(前提是所有的业务表都有相同的仓库编码和客户编码两个字段),当然也有部分基础数据又是不能过滤的;思路最简...

2020-01-09 10:09:43 1033

原创 java8线程和异步常用的类

1.java.lang包接口Runnable:提供一个无参的run(),其实例将由线程执行;Thread.UncaughtExceptionHandler(线程异常处理): -当线程由于未捕获的异常而终止时,将调用该接口;如果线程没有设置,将调用ThreadGroup;如果ThreadGroup没有处理,将调用默认的线程异常处理接口;类Thread(线程):java...

2019-11-07 14:05:15 1366

原创 ThreadLocal、InheritableThreadLocal和ThreadLocalMap源码解析

1.ThreadLocal作用作用:为变量在线程中都创建副本,线程可访问自己内部的副本变量。该类提供了线程局部 (thread-local) 变量,访问这个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本原理:每个线程都有一个ThreadLocalMap类型变量 threadLocals。ThreadLocal的set()会在threadLoca...

2019-08-20 17:09:38 1558

原创 Spring RestTemplate源码分析

1.问题本人在为pingss-sys脚手架(项目地址)写测试用例时,需要传送多项参数。在post请求中接收参数的方式:@PostMapping(value = "/save")public ApiResponse save(User entity)此方式参数体必须为"name=test&sex=1"格式,但是在TestRestTemplate传送参数时,如果参数体为一个实体类...

2019-07-24 16:00:15 1070

原创 Spring RestTemplate源码走读

1.RestTemplate源码走读A.TestRestTemplateTestRestTemplate只是封装了RestTemplate,直接调用RestTemplate的方法public <T> ResponseEntity<T> exchange(...) { return this.restTemplate.exchange(...);}B....

2019-07-22 16:13:46 982

空空如也

空空如也

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

TA关注的人

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