JVM类加载器和双亲委派模型 序言在了解类加载器之前首先我们需要知道在JVM中类加载的过程步骤为:加载 -> 连接 -> 初始化。 而连接过程又可以进一步细分为三步:验证 -> 准备 -> 解析。 加载是类加载过程的第一步,主要完成下面 3 件事情: 通过全类名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的 Class 对象,作为方 2024-01-06 JVM > 类加载器 #JVM #类加载器 #双亲委派
记一次Spring boot本地启动报IllegalAccessError异常原因 序言最近项目接入公司一个 SSO 统一身份认证组件,这里简单说明一下: 组件提供的自动配置类启动时如果 UserCenterActivated 这个Bean不存在的话会使用组件默认的用户激活组件,然后我是在项目中实现了自己的一个用户激活类并继承了UserCenterActivated抽象类。 项目启动时奇怪的出现了以下错误: 1class xxx.sso.support.$Proxy130 ca 2024-01-05 问题记录 #热部署 #双亲委派 #devtools
将白嫖进行到底——记一次网站服务迁移国外服务器流程 序言先简单介绍一下这个网站吧,域名是几年前在阿里云买的,当时也入手了个服务器用于部署毕设项目,为了能正常访问网站也是备案过一次,服务器到期之后就没管了,但一直有在续域名。 两个月前用域名搭了一个博客,服务器白嫖的Github Page,图床使用的阿里云的OSS。(重点:公开访问!) 运行了小两月都没什么事情,直到在V2看到有人OSS存储被盗刷,损失好几千,吓得我赶紧开通了阿里的CDN服务,把Buc 2023-11-30 网站 > 迁移 #CDN #图床 #DNS #迁移
如何优雅切换联表查询表格所使用的Schema 序言前面提到过通过动态数据源实现多个数据源之间的连接,本以为能够实现我的多版本知识库切换需求。 但是!如果不出意外肯定就要出意外了! 项目中存在大量联表查询语句,例如: 1234select *from t1 inner join t2 on t1.template_id = t2.id inner join t3 on t3.template_id = t2.id 2023-11-16 中间件 > 动态数据源 #动态数据源 #Schema #联表查询切换
动态数据源实现多版本内容库切换 序言最近有一个基于C/S(客户/服务端)结构的多版本内容控制的需求。服务端为所有客户端提供知识库内容支持,客户端可以通过前台页面在线更新服务端的知识库内容,客户端需要使用知识库的内容进行一系列的操作,具体做什么操作不是重点。 现在问题是产品需要支持在旧版本的知识库创建的作业更新后任然使用旧版本知识库内容,而创建新作业时使用更新的知识库内容 经过需求分析之后决定使用动态数据源来处 2023-11-10 中间件 > 动态数据源 #动态数据源
简单工厂+责任链模式实现任务完整性校验 序言现在有这样一个场景: 作业结项时需要对每个 Label 中的数据完整性进行校验。你可以将 Label 理解为不同的标签,每个标签中都需要完成特定的内容,一个作业可以配置多个 Label 。 看到这个需求,我们二话不说,直接在作业结项接口中新增代码,对每个 Label 进行校验操作。 这样有问题吗?当然没问题!(你看着被代码塞满的类心虚的说到) 一顿操作猛如虎,代码 Review 骂成狗 ~ 作 2023-10-27 设计模式 #简单工厂模式 #责任链模式
MySQL Generated Columns 序言MySQL 5.7 引入了生成列(Generated Columns 还有一种虚拟列的叫法)的支持。生成列中的值由列定义的表达式计算得出。 创建生成列创建生成的列语法定义如下: 1234col_name data_type [GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED] [NOT NULL | NULL] [UNIQUE [KEY]] [[P 2023-10-26 数据库 > MySQL #数据库 #MySQL #数据类型
MySQL JSON Data Type 序言MySQL 在 5.7.8 版本中首次引入 JSON 数据类型。这使得我们可以更好地处理和操作 JSON 数据,包括存储、查询和索引 JSON 数据。在此之前,要处理 JSON 数据,通常需要将其存储为文本,并使用字符串函数进行操作。程序中我们也无法直接使用从数据库获取的 JSON 数据,需要进一步转化,十分不方便。 JSON 数据类型相对于将 JSON 格式字符串存储在字符串列中具有以下优势 2023-10-17 数据库 > MySQL #数据库 #MySQL #数据类型
CompletableFuture-一种异步任务编排解决方案 序言多线程主要是通过提高对 CPU 的利用率从而提升多任务处理的效率,以满足用户的友好体验。 根据 Oracle 官方文档的描述:JAVA 中创建线程的方式有两种: 继承 java.lang.Thread 类。( Thread 类本质上也是实现了 Runnable 接口) 实现 java.lang.Runnable 接口。 但是,这两种方法都存在一个缺陷——没有返回值,也就是说我们无法得知线程 2023-10-13 JAVA > 多线程 #Thread #多线程
ThreadLocal ThreadLocal是什么在处理多线程并发安全的问题中,我们最常使用的方法就是通过锁来控制多个不同线程对临界区的访问。 但无论是什么样的锁,乐观锁或者悲观锁,尽管JDK 在升级过程中对它们都有不同程度的优化,但在并发冲突的时候总是会对性能产生一定的影响。 而我们今天的主角 ThreadLocal 解决的正是彻底避免多线程之间产生的竞争问题。 从字面意思上看,ThreadLocal 可以解释为线程 2023-10-09 JAVA > 多线程 #Thread #多线程