
系统架构设计
文章平均质量分 65
Java开发规范、系统性能指标、软件系统架构相关
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
骆驼整理说
这个作者很懒,什么都没留下…
展开
-
领域驱动设计(DDD)
领域层(Domain Layer):是DDD的核心,包含了业务实体、值对象、领域服务、领域事件等。应用层(Application Layer):应用层是业务逻辑的入口点,是与其它系统应用层进行交互的必要渠道,它协调领域层和基础设施层之间的交互。2007年之后,DDD逐渐得到了大家的认可,不断地有人将其实践应用到具体的业务中,形成了许多成功的案例。这个时期主要是关注领域模型的建立和关注业务的复杂性。这个时期主要是DDD社区的扩展和活跃,不断有新的技术、工具和案例推出,丰富了DDD的实践经验和理论基础。原创 2023-04-22 10:38:59 · 958 阅读 · 2 评论 -
什么是安全漏洞
安全漏洞原创 2025-05-13 23:10:29 · 19 阅读 · 0 评论 -
Linux系统命令
Linux基础命令汇总原创 2022-11-21 15:55:03 · 535 阅读 · 0 评论 -
Docker相关命令
nacos安装及运行相关命令原创 2023-09-16 21:27:52 · 532 阅读 · 0 评论 -
SpringBoot注解实现下载功能
【代码】SpringBoot注解实现下载功能。原创 2025-02-18 19:16:01 · 58 阅读 · 0 评论 -
Spring Boot实现跨域
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域首先编写一个过滤器,可以起名字为MyCorsFilter.java@Component在web.xml中配置这个过滤器,使其生效-- 跨域访问 START--><filter></filter>-- 跨域访问 END -->原创 2025-02-18 19:13:43 · 593 阅读 · 0 评论 -
Spring Cloud集成Nacos注册中心
在 Spring Cloud项目中引入Nacos依赖:在你的 Spring Cloud 项目的 `pom.xml` 文件中,需要添加 Nacos 的相关依赖。这些依赖包括 Nacos 的客户端和服务发现的依赖。配置 Nacos:在你的 `bootstrap.yml` 或者 `application.yml` 文件中,需要添加 Nacos 的相关配置。在Nacos的控制,可以看到已注册的服务列表以及服务的详细信息。此时,你的项目会自动向 Nacos 注册中心注册服务。安装完成后,启动Nacos服务。原创 2025-02-18 19:00:13 · 63 阅读 · 0 评论 -
领域驱动设计架构演进
按照业务进行拆分,订单系统是一个子域,库存系统是一个子域,商品在不同的子域中表示的含义不同,在订单上下文中的商品表示商品的单价、折扣等,在库存的上下文中表示商品的库存量、成本、存放位置等。:基础设施服务,Infrastructure-as-a-service,像订单服务并发量高,单台服务器已经无法满足要求,就需要多台服务器,可能有windows的、linux、mac,想要快速部署就需要屏蔽OS,于是就有了VM、Docker、K8S等技术来屏蔽OS。当业务发展到一定规模时,需要系统化的方法来管理领域模型。原创 2024-05-08 10:09:55 · 421 阅读 · 0 评论 -
DDD领域驱动架构有哪些
DDD领域驱动架构原创 2024-05-08 10:07:12 · 259 阅读 · 0 评论 -
如何设计一个类似Dubbo的RPC框架
首先有个注册中心,提供的服务在注册中心注册保留各个服务的信息,用zookeeper来做。然后消费者需要去注册中心拿对应的服务信息,而且每个服务可能会存在于多台机器上。基于动态代理,面向接口获取到一个动态代理,就是接口在本地的一个代理,然后这个代理会找到服务对应的机器地址。再然后就要找想哪个机器发送请求,用负载均衡算法,比如最简单的随机轮询。找到了一台机器,就可以跟它发送请求了,然后就是如何发送?服务器那边一样的,需要针对自己的服务生成一个动态代理,监听某个网络端口了,然后代理本地的服务代码。原创 2024-04-03 09:53:26 · 553 阅读 · 2 评论 -
sharding-mybatis分库分表
在不分库分表的时候, datasource只能设置一个, 设置多个则无用 仅分库的时候,只设置 dbRule, 仅分表的时候设置 tableRule。在mapper上添加注解标记出分表键, 如不需要分库分表, 仅配置datasource和mapperLocation。支持分库分表(仅支持整数类型的sharding Key)支持分库分表规则自定义(aviator 表达式引擎)支持只分库、支持只分表、支持不分库分表。支持使用事务 (见下面使用说明)开启分库分表支持的配置。原创 2024-03-25 15:15:34 · 143 阅读 · 0 评论 -
SpringCloud Gateway网关服务搭建
搭建Spring Cloud Gateway服务。原创 2024-03-14 08:36:41 · 279 阅读 · 0 评论 -
领域驱动设计的原则
这意味着在开发过程中,需要深入了解业务,理解业务领域的概念、规则和流程,并将这些业务需求和规则映射到软件系统中。这意味着在软件设计中,需要遵循业务规则,确保软件系统的行为符合业务领域的期望和要求。领域模型是DDD的核心,它是对业务领域的一种抽象和表示。领域驱动设计的主要原则是以业务领域为主导,以领域模型为核心,关注业务规则、可重用性、可扩展性和全面的测试策略,确保软件系统的质量和可维护性。领域专家提供业务领域的专业知识和规则,技术专家则将这些知识和规则转化为软件系统的设计和实现。领域专家和技术专家的合作。原创 2024-03-12 13:37:01 · 194 阅读 · 0 评论 -
Java工具包Hutool框架
Hutool是一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行封装,组成各种 Util 工具类。Hutool的更多工具类,参考官网:https://www.hutool.cn/MapUtil,Map操作工具类,可用于创建Map对象及判断Map是否为空。DateUtil,日期时间工具类,定义了一些常用的日期时间操作方法。,数字处理工具类,可用于各种类型数字的加减乘除操作及判断类型。,字符串工具类,定义了一些常用的字符串操作方法。,加密解密工具类,可用于。原创 2023-11-19 14:41:52 · 787 阅读 · 0 评论 -
Maven间接依赖
右边的子pom生成的树依赖了 D-1和D-2,并且位于同一深度,但由于D-1和D-2是属于间接依赖的范围,deep大于1,所以是靠前优先,那么也就是D-1会竞争成功。SpringBoot的打包是越靠后的构建pom越优先,因为一般会把springboot的打包插件放在最不被依赖的module里(比如上图里的Pom3)。由于子pom会继承主pom的元素,并且在继承的时候会出现覆盖的场景。添加修复版的依赖包就会导致间接依赖的发生,遇到相同的依赖时maven是如何抉择的,基于此问题作了一个整理。原创 2023-11-15 11:02:51 · 366 阅读 · 0 评论 -
SpringBoot文件在线预览实现
一款成熟且开源的文件文档在线预览项目解决方案。详细wiki文档:https://gitee.com/kekingcn/file-online-preview/wikis/pages中文文档:https://gitee.com/kekingcn/file-online-preview/blob/master/README.md可以预览txt文档的内容、图片预览、word文档预览、ppt文档预览、pdf文档预览、excel文档预览、压缩文件预览、多媒体文件预览视频文件播放、音频文件预览、CAD文档预览。原创 2023-11-14 12:50:21 · 467 阅读 · 0 评论 -
Excel导入10w行级数据优化
数据导入:根据导入模板写入相应数据,格式是xlsx (支持 65535+行数据)。数据校验:数据校验,字段长度、字段正则表达式校验等,内存内校验不存在外部数据交互。数据重复性校验,如票据号是否和系统已存在的票据号重复(需要查询数据库,十分影响性能)。数据插入:测试环境数据库使用MySQL 5.7,未分库分表,连接池使用Druid。原创 2023-11-14 12:40:01 · 188 阅读 · 0 评论 -
Apache Log4j2漏洞
Log4j2是一个Java日志组件,被各类Java框架广泛使用,它的前身是Log4j,Log4j2重新构建和设计了框架。本次漏洞影响范围为Log4j2最早期的版本2.0-beta9到2.15.0。Log4j只有一个jar包log4j-${版本号}.jar。Log4j2分为2个jar包,一个是接口log4j-api-${版本号}.jar,一个是具体实现log4j-core-${版本号}.jar。Log4j2的版本号目前均为2.x。Log4j的版本号均为1.x。原创 2023-11-13 21:21:33 · 982 阅读 · 0 评论 -
BigDecimal
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。原创 2023-11-12 14:01:51 · 258 阅读 · 0 评论 -
注解和反射实现Excel导入导出
定义三个注解注解使用导入方法,服务端接收到前端上传的Excel文件之后,使用poi来读取Excel文件导出方法建立一个工作簿,也就是类型新建一个Excel文件建立一张sheet表设置标的行高和列宽绘制标题和表头写入数据到Excel创建下拉列表写入文件到response到这里导出工作就完成了。原创 2023-11-10 13:17:42 · 127 阅读 · 0 评论 -
SpringBoot日志链路追踪实现
项目业务调用链场景很长,看日志时各个接口的日志穿插,很难找到对应的日志,定位分析问题就相对困难。要想呈现出整个链路相关的日志,就需要把同一个业务调用链上的日志串起来。自定义日志拦截器LogInterceptor,每一次链路(线程维度),添加最终的链路TRACE_ID。集成logback打印日志,logback-spring.xml配置。WebConfigurerAdapter添加拦截器。再配合模糊匹配查找日志。原创 2023-11-09 12:46:45 · 247 阅读 · 0 评论 -
Optional非空判断
super predicate ):如果值存在,并且这个值匹配给定的predicate ,返回一个Optional用以描述这个值,否则返回一个空的 Optional ,superTOptional>mapper ):如果值存在,返回基于 Optional包含的映射方法的值,否则返回一个空的Optional。staticOptional ofNullable(Tvalue ):如果为非空,返回Optional描述的指定值,否则返回空的 Optional。原创 2023-11-09 12:44:38 · 179 阅读 · 0 评论 -
sftp上传下载文件实现
定时的从sftp文件服务器上下载指定文件到指定目录。原创 2023-11-08 18:07:28 · 355 阅读 · 0 评论 -
文件上传下载
前端(客户端)需要根据固定大小对文件进行分片,请求后端(服务端)时要带上分片序号和大小服务端创建conf文件用来记录分块位置,conf文件长度为总分片数,每上传一个分块即向conf文件中写入一个127,那么没上传的位置就是默认的0,已上传的就是Byte.MAX_VALUE 127(这步是实现断点续传和秒传的核心步骤),服务器按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件。在之后支持再次上传时,可以继续从上次上传中断的地方进行继续上传。原创 2023-11-07 21:47:50 · 170 阅读 · 0 评论 -
SpringBoot系统日志Aop注解方式动态记录
注解解析类,解析注解上的值。原创 2023-10-28 19:39:23 · 159 阅读 · 0 评论 -
SpringBoot缓存@Cacheable注解
可以用来指定符合条件的情况下才缓存,condition默认true,unless默认false,当 condition = false,一定不会缓存;@CacheEvict,当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。Spring Cache是作用在方法上的,当调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存在缓存中。beforeInvocation:非必需,默认为false,会在调用方法之后移除数据。当 unless 指定的条件为 true ,方法的返回值就不会被缓存。原创 2023-10-28 19:42:03 · 488 阅读 · 0 评论 -
Redis分布式锁实现
针对多个进程访问共享资源而提供的同步方案,保证共享资源的正确性,某一时刻锁定全局资源,让进程串行化执行,能有效避免共享资源被多个进程同时访问时候出现的数据正确性问题。使用分布式锁可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行。高可用 :锁服务是高可用的。并且,即使客户端的释放锁的代码逻辑出现问题,锁最终一定还是会被释放,不会影响其他线程对共享资源的访问。倘若我心中的山水,你眼中都看到,我便一步一莲花祈祷,怎知那浮生一片草,岁月催人老,风月花鸟一笑尘缘了。原创 2023-09-29 14:31:29 · 160 阅读 · 0 评论 -
MybatisPlus多表关联分页查询
Mybatis-plus的多表关联查询的参数,可以使用LambdaQueryWrapper或QueryWrapper加入多个表查询条件,并使用Join方法进行关联。Mybatis-plus是一个Mybatis的增强工具,提供了许多功能强大的API,其中包括分页查询和多表关联查询。在Mybatis-plus中,连表查询可以使用LambdaQueryWrapper或QueryWrapper加入多个表进行查询,然后再使用IPage进行分页。原创 2023-09-04 19:01:34 · 5101 阅读 · 0 评论 -
Xml转json
Xml转json。原创 2023-09-01 12:52:06 · 738 阅读 · 0 评论 -
SQL注入安全漏洞
每种类型的SQL注入都有其特定的攻击方式和应用场景,但无论哪种类型,都需要引起开发人员和安全人员的重视,并采取适当的防御措施来防范。联合查询注入:攻击者通过在查询中插入额外的查询语句,利用联合查询(UNION)的特性,使数据库执行额外的操作或泄露敏感信息。盲注:盲注是一种特殊类型的SQL注入,其中攻击者无法直接看到查询结果,但可以通过观察应用程序的响应(如延迟时间)来推断数据库中的信息。基于错误的注入:攻击者通过在SQL查询中插入错误的语法,触发数据库错误,并从错误消息中获取有关数据库结构和数据的信息。原创 2023-08-25 17:16:39 · 482 阅读 · 0 评论 -
Mybatis-plus 批量插入实现
采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用。内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。内置的saveBatch批量插入接口,其实就是一个for循环插入,会对数据库产生很大的压力。基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询。原创 2022-12-08 13:11:43 · 1357 阅读 · 0 评论 -
Spring Boot WebSocket实时监控
消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。需要服务端主动向客户端发送消息,用WebSocket来实现这一功能。WebSocketServer类,用来进行服务端和客户端之间的交互。新建SpringBoot工程,选择web和WebSocket依赖。打开前端页面,进行WebSocket连接,控制台输出,连接成功。WebSocketController类。WebSocketConfig配置类。配置application.yml。原创 2022-04-05 17:02:54 · 1716 阅读 · 0 评论 -
Spring RMI使用和原理
RMI全称是Remote Method Invocation-远程方法调用,是纯Java的网络分布式应用系统的核心解决方案之一。Java RMI 支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。RMI目前使用Java远程消息交换协议JRMP进行通信。由于JRMP是专为Java对象制定的,用Java RMI开发的应用系统可以部署在任何支持JRE的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。原创 2022-12-08 14:26:37 · 880 阅读 · 0 评论 -
Spring框架提供的工具类
Spring Stopwatch是Spring框架提供的一个用于计算代码执行时间的工具类。它可以在方法的开始和结束位置记录时间戳,并计算出两个时间戳之间的时间差,从而得到方法的执行时间。org.springframework.util.StopWatch属性taskList: 任务信息列表keepTaskList: 是否保留任务信息列表startTimeMillis: 任务开始的时间currentTaskName: 任务名称lastTaskInfo: 任务信息taskCount: 任务数量。原创 2023-08-24 15:26:49 · 321 阅读 · 0 评论 -
Spring监听器和定时任务
在Spring框架中,可以使用MessageSource来管理应用程序的消息。将消息从代码中分离出来,使得代码更加清晰,也更容易进行国际化。首先在Spring的配置文件中定义一个MessageSource的bean。获取消息外,还可以在Bean中注入MessageSource,然后通过它来获取消息。以CronTask任务进行分析,其他定时任务同理。,这是Spring提供的一个实现,从属性文件中读取消息。查看Spring源码分析其原理,第一步,初始化,原理,源码分析如下。原创 2022-12-08 13:01:56 · 727 阅读 · 0 评论 -
操作记录日志保存设计实现
切面日志原创 2023-08-21 17:16:17 · 192 阅读 · 0 评论 -
服务接口出参入参切面日志设计
切面日志打印原创 2023-08-21 17:03:20 · 210 阅读 · 0 评论 -
MybatisPlus分页插件配置
Mybatis Plus 3.4.0版本及之后的版本配置。原创 2023-08-11 14:25:02 · 879 阅读 · 0 评论 -
MyBatis-Plus代码生成器
如果模板引擎是freemarker,模板文件就引入XX.ftl文件,如果模板引擎是velocity,就引入XX.vm文件。这里用的模板引擎是freemarker。使用自定义SQL日志打印。原创 2023-08-09 17:39:45 · 283 阅读 · 0 评论 -
SpringBoot集成shiro认证授权框架
Shiro是Apache下的一个开源项目。shiro属于轻量级框架,相对于SpringSecurity简单的多,也没有SpringSecurity那么复杂。认证流程创建token令牌,token中有用户提交的认证信息即账号和密码;执行subject.login(token),最终由securityManager通过Authenticator进行认证;Authenticator的实现ModularRealmAuthenticator调用MyShiroRealm以获取系统中用户真实的账号和密码;原创 2023-08-07 17:30:51 · 220 阅读 · 0 评论