自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DDD与MVC扩展能力对比

DDD的优势:通过业务与技术解耦、分层隔离、高内聚模型,天然支持复杂业务的可扩展性。MVC的适用场景:适合简单业务或技术驱动型项目,其轻量化和快速开发特性在小规模场景中更具优势。若项目涉及复杂业务、频繁变更或微服务化需求,DDD是更优选择;若仅需快速实现功能且业务稳定,MVC仍具实用性。扩展场景MVCDDD数据库迁移需修改DAO层和Service层代码仅修改基础设施层的Repository实现类第三方服务升级直接修改Service层调用逻辑修改基础设施层的适配器,领域层不变新增业务规则。

2025-04-03 16:33:26 286

原创 SpringBoot+Mybatis-Plus实现动态数据源

这段时间刚好有需求,需要在当前的一个模块中直连其他系统的数据库,但是当前系统并不支持多数据源,只支持单数据源。这也可以通过新建一个模块来编写该需求,但是总感觉不是特别方便,万一后续又要连接其他数据库,又要新建一个个模块。或者可以引入mybatis-plus的多数据源支持依赖,虽说简单,但总有不妥的地方。因此,在这个需求下,实现了比较轻量的数据源切换组件。这次学习虽然耗费了一周零零散散的时间,在完成需求的基础上,追究原理,也通过画图加深了理解,不得不感叹这些框架太灵活了,留这么多东西可以让我们自定义扩展。

2025-02-23 22:55:04 784

原创 MybatisPlus整合druid多数据源

账号密码为yaml文件配置的admin和123456。

2025-02-09 16:20:20 398

原创 SpringSecurity的Oauth2学习笔记

通过app_id和app_secret获取的access_token:用于全局接口调用,是服务器端操作的凭证,对应前面所说的客户端凭证模式。通过code获取的access_token:用于获取用户授权信息,主要用于网页授权场景,与特定用户关联,对应前面所说的授权模型。这周有空都在调试代码,查看springsecurityoauth2的认证授权流程,调试了几天之后,脑子有点蒙蒙了,只能初步了解一些流程原理,不得不说这个框架确实有点东西。。授权模型(用户认证接口)和密码模式。

2025-01-18 22:24:23 501

原创 CentOS安装Git

连续点击三次回车,可以在用户目录下查看生成了。2.测试是否安装成功。

2025-01-12 20:10:23 395

原创 Github拉取项目报错解决

我重新设置github上的ssh key,梯子也开了还是报这个错,换成https链接拉取也报错,查阅资料发现,此错误信息为不能通过 22 端口连接到 GitHub。

2025-01-02 13:46:46 587

原创 Docker安装MySQL

【代码】Docker安装MySQL。

2025-01-02 08:19:42 142

原创 CentOS安装Docker

CentOS安装Docker。

2025-01-02 08:16:31 324

原创 Spring中每次访问数据库都要创建SqlSession吗?

本文大致讲解了Mybatis手动创建SqlSession的流程,引入Spring之后为什么就不需要手动去创建SqlSession,以及Spring创建SqlSession的时机原理。自动扫描标注@Mapper的接口,生成一个代理对象,其中代理对象的增删改查操作最终会由来执行会生成一个代理SqlSession接口的对象,由该代理对象帮我们管理SqlSession的创建,当方法上标注了注解,则该方法里面多次访问数据库用的是同一个SqlSession,否则每次调用方法都会去创建一个SqlSession。

2024-11-29 16:42:41 1415

转载 Mybatis如何关闭一级缓存

Mybatis导致。虽然很少会在一次session中查询两次,但比如在和银行支付交互,等待银行异步通知回调的时候,查询状态和确认状态时会调用同样的查询方法两次。所以这时候需要,其实一级缓存是无法关闭的,下面的方法只在可以看到,加入了或者,会刷新缓存这个方法就是使用拦截器获得的Executor调用的clearLocalCache()方法。

2024-11-29 16:36:12 458 1

原创 @Lazy注解原理

假设 A 先加载,在创建 A 的实例时,会触发依赖属性 B 的加载,在加载 B 时发现它是一个被 @Lazy 标记过的属性。后续A中调用B的方法时,由于注入的B是代理对象,所以会去走获取bean的流程,因为前面已经注册了B的bean,所以可以直接从一级缓存中取到B的bean。bd.isLazyInit())条件表示,不是抽象类并且是单例,且不是懒加载的bean(类上面没有标记@Lazy注解),就走getBean方法的逻辑去创建bean,否则什么也不会做,此时注册B的bean,由于if (!

2024-09-25 11:40:39 956

原创 Spring不能处理的循环依赖

Spring 为我们解决了循环依赖的问题。prototype 类型的循环依赖constructor 注入的循环依赖@Async 类型的 AOP Bean 的循环依赖这些解决不了的场景都可以通过 @Lazy注解来解决,@Async的场景还可以通过@DependsOn注解解决。

2024-09-25 11:26:18 1342

原创 JUC学习笔记(三)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录八、共享模型之工具--JUC8.1 AQS 原理1. 概述2 实现不可重入锁自定义同步器自定义锁3.心得起源目标设计1) state 设计2)阻塞恢复设计3)队列设计8.2 ReentrantLock 原理1. 非公平锁实现原理加锁流程解锁流程加锁源码解锁源码2. 可重入原理3. 可打断原理不可打断模式可打断模式4. 公平锁实现原理5. 条件变量实现原理await 流程signal 流程源码8.3 读写锁1. ReentrantR

2024-09-16 21:18:38 1276

原创 JUC学习笔记(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录四、共享模型之内存4.1 Java 内存模型4.2 可见性退不出的循环解决方法可见性 vs 原子性模式之 Balking1.定义2.实现4.3 有序性原理之指令级并行1. 名词2.鱼罐头的故事3.指令重排序优化4.支持流水线的处理器诡异的结果解决方法原理之 volatile1.如何保证可见性2.如何保证有序性3.double-checked locking 问题4.double-checked locking 解决happens-

2024-09-16 20:51:41 1790

原创 JUC学习笔记(一)

文章目录一、进程与线程1.1 进程与线程1)进程2)线程3)二者对比1.2 并行与并发注意二、Java线程2.1 创建和运行线程1)直接使用 Thread2)使用 Runnable 配合 Thread3)FutureTask 配合 Thread2.2 查看进程线程的方法1)windows2)linux3)java2.3 原理之线程运行栈与栈帧线程上下文切换2.4 常见方法2.5 start 与 run2.6 sleep 与 yieldsleepyield线程优先级2.7 join 方法详解为什么需要 jo

2024-09-16 20:50:28 1951

原创 Redisson实现分布式锁

对本文进行了总结记录。

2024-09-13 16:01:36 1491

原创 策略模式的应用

系统有一个需求就是采购员审批注册供应商的信息时,会生成一个供应商的账号,此时需要发送供应商的账号信息(账号、密码)到注册填写的邮箱中,通知供应商账号信息,当时很快就写好了一个工具类,用来发送普通的文本邮件信息。但是随着系统的迭代,后面又新增了一些需求,比如一些单据需要在供应商确认时,发送一条站内信到首页,这样采购员登录时就可以看到最新的单据信息,进行相应的处理;

2024-07-06 22:28:06 1267

原创 mybatis-plus参数绑定异常

最近要搞个发票保存的需求,当发票数据有id时说明是发票已经保存只需更新发票数据即可,没有id时说明没有发票数据需要新增发票;然后看到updateById方法的逻辑后,点了下baseMapper的updateById方法,因为装了插件,所以旁边有个小图标,点了下直接跳转到了自定义Mapper接口的updateById方法。好家伙,参数不对也调到了这个方法,然后因为我传的是Invoice类型的参数,而这个方法的接收参数第一个是InvoiceDto类型的参数,类型不匹配然后报错了。

2024-07-06 14:38:47 519

原创 SpringCloud Gateway动态添加路由不重启

在微服务项目中,SpringCloud Gateway扮演着极为重要的角色,主要提供了路由、负载均衡、认证鉴权等功能。本文主要讲解如何实现网关的自定义动态路由配置,无需重启网关模块即可生效。

2024-06-12 19:41:38 1474 2

转载 Seata--分布式事务中的AT模式方案

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题。

2024-05-25 11:10:45 91

原创 DS注解作用

在事务执行期间,如果这个方法调用了另一个方法,那么这个方法也会被代理对象所代理,也就是说,这个方法也会被切换到当前数据源,并且也会被包含在当前事务中。在多租户系统中,不同的租户可能需要连接不同的数据库,因此需要动态切换数据源。通过在注解中指定数据源的标识,可以让 MyBatis-Plus 框架自动切换到对应的数据源,从而实现动态切换数据源的功能。如果在调用另一个方法时,这个方法上也有@DS注解,那么这个注解会被代理对象所覆盖,也就是说,这个方法会使用当前数据源,而不是它本来应该使用的数据源。

2024-03-01 17:17:32 1456

原创 Linux部署多个jar包脚本

【代码】Linux部署多个jar包脚本。

2024-03-01 11:30:31 879

原创 Unirest工具类的使用

【代码】Unirest工具类的使用。

2024-02-25 14:01:36 595 1

原创 RestTemplate参数设置【post请求】

①post请求,contentType:application/json(使用了@RequestBody接收参数)②post请求,contentType:application/x-www-form-urlencoded。使用LinkedMultiValueMap设置参数,然后发起请求。使用HashMap设置参数,然后转json字符串发起请求。

2024-02-25 13:53:08 2722 1

原创 @Builder注解

● 如果需要在原来的基础上修改可以加 set 方法,final 字段可以不需要初始化。● 初始化实例对象生成的对象是不可以变的,可以在创建对象的时候进行赋值。● 它作用于类,将其变成建造者模式。● 它会生成一个全参的构造函数。● 可以以链的形式调用。

2024-02-24 10:10:48 443 1

原创 @SneakyThrows注解

也就是说,并不是我们忽略了异常,而是类似于Lombok的@Data注解,在编译时就已经把处理的代码嵌入到了class内。@SneakyThrows直接把捕获异常的代码嵌入到了class文件里。

2024-02-24 10:02:00 438 1

原创 Spring自动装配方式

Spring自动装配方式

2024-02-23 09:11:31 1212

原创 SpringBoot单元测试方式

①引入Test注解:import org.junit.jupiter.api.Test;①引入Test注解:import org.junit.jupiter.api.Test;③引入@RunWith(SpringRunner.class)注解。③引入@RunWith(SpringRunner.class)注解。①引入Test注解:import org.junit.Test;①引入Test注解:import org.junit.Test;②方法前面需要加public修饰。②方法前面需要加public修饰。

2024-02-23 08:45:57 786

原创 maven打包提示报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (defaul

【代码】maven打包提示报错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (defaul。

2024-02-22 08:57:20 584 1

原创 Linux防火墙常用命令

描述命令查看防火墙服务状态systemctl status firewalld查看防火墙状态firewall-cmd --state开启防火墙service firewalld start重启防火墙service firewalld restart关闭防火墙service firewalld stop查看防火墙规则firewall-cmd --list-all查看端口是否开放firewall-cmd --query-port=8080/t

2024-02-22 08:50:02 379 1

原创 Dockerfile和jar包不同目录处理

如果Dockerfile的全路径为/srm/myDockerfile/Dockerfile,而JAR文件位于/srm目录下,你可以在Dockerfile中使用相对路径引用JAR文件。这将在容器中启动你的Java应用程序,可以通过localhost:8080访问它。确保根据你的应用程序的实际需求修改Dockerfile和Docker运行命令。在这个Dockerfile中,工作目录被设置为/srm/myDockerfile,即Dockerfile所在的目录...

2024-02-21 17:07:44 630

原创 docker-compose部署jar包

Docker Compose是一个用来定义和运行复杂应用的Docker工具一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

2024-02-21 16:56:38 1648

原创 feign远程调用请求头设置参数

通过实现RequestInterceptor 接口,重写apply方法逻辑,设置相应的参数,此时在业务方法中远程调用对应接口时,都会携带这些参数,可在远程调用接口所在服务中进行解析使用。

2024-02-20 19:58:51 1976

原创 Linux安装RocketMQ

由于我电脑只有8g内存,分配了2g给虚拟机,现在可用内存为1g,所以需要将broker和nameserver的堆内存调小,可根据自己服务器可用内存调节大小。**namesrvAddr:**nameSrv地址 可以写localhost因为nameSrv和broker在一个服务器。**brokerIP1:**broker也需要一个公网ip,如果不指定,那么是服务器的内网地址,我们再本地无法连接使用。**autoCreateTopicEnable:**自动创建主题,不然需要手动创建出来。最终会生成一个jar包。

2024-02-20 19:49:20 1496

原创 Linux的scp命令

第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;第2个没有指定用户名,命令执行后需要输入用户名和密码;scp命令主要用于Linux服务器之间复制文件和目录。第1个指定了用户名,命令执行后需要再输入密码;

2024-02-19 17:18:36 363 1

原创 MinIO安装教程(Windows版)

访问地址:http://localhost:9090/login。

2024-02-19 16:39:57 895 1

原创 MySQL生产数据备份

对于系统来说,生产数据是非常重要的,有时候不小心删除了却找不回来就酿成了大祸。因此,定时备份生产数据是非常有必要的,即使不小心删除了全部数据,也可以使用备份数据进行回复。本文提供MySQL的备份脚本,可按自己的需求进行修改。

2024-02-19 15:14:52 1030 1

原创 el-table渲染踩坑

本人前端不是特别熟,今天在弄一个弹窗表格功能时,发现只要点开某一行数据的弹窗再关闭,再点击其他弹窗时,发现最大数量都会以第一次为准,不是以当前数据行的为准。

2023-12-26 14:21:02 691 1

原创 feign调用接口成功后直接进入fallback回调方法排查

昨天下午上班需要写个远程调用接口获取文件的上传日期,但是我在客户端调用远程接口成功后并没有拿到数据,调试发现调用接口成功后直接进入了fallback回到方法,返回了null

2023-12-23 10:15:32 2439 3

原创 equals的一些细节。

前言:前段时间使用equals方法出现了一些小问题,我们往下看:代码一:public class TestEquals { String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isSame() { //出错代

2020-12-02 14:31:14 210

空空如也

空空如也

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

TA关注的人

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