自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java apache.commons.compress Zip压缩

【代码】java apache.commons.compress Zip压缩。

2024-04-30 10:21:34 190 1

原创 手写jpa自动创建数据库表

jpa自动创建数据库表

2023-02-22 09:19:16 1624 1

原创 org.apache.commons.io.FileUtils.writeStringToFile写入文件失败

org.apache.commons.io.FileUtils.writeStringToFile写入文件失败

2022-12-01 15:28:03 1113

原创 esaypoi导入excel工具模版

Excel批量导入,有这一篇够用了,附带源码

2022-11-20 11:26:23 736

原创 linux删除指定日期之外的文件

linux 删除指定天数之外的文件

2022-10-18 09:44:02 252

原创 java服务配置开机自动重启

java jar包 linux 开机自启动

2022-07-30 19:04:58 830

原创 spring源码aop解析xml生成bean定义信息

spring面向切面编程是咱们工作中使用比较频繁的一项技术,比如:日志、事务、表单重复提交等了解aop之前需要先了解几个概念什么是aspect :切面什么是连接点:切面方法切入点表达式:用于过滤目标方法的过滤器什么是织入:所有切面方法的总称什么是目标方法:被代理的对象方法看下AOP处理器public class AopNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() {

2022-05-10 17:51:10 237

原创 spring源码如何解决循环依赖

到这里咱们IOC简单流程基本上算结束了,但是有一个非常火热的解决方案值得咱们深入了解下,那就是循环依赖下面咱们从这三个维度去分析:什么是循环依赖?造成循环依赖的原因是什么?spring是怎么解决的循环依赖?最后演示下流程什么是循环依赖?咱们都知道,spring创建bean分为实例化、填充属性、初始化等,当对象完成实例化后开始给属性赋值,这时咱们再去想一个场景,如果一个对象A有属性B b,对象B有一个属性是A a,咱们设想下,spring开始创建A对象对,然后给A对象的属性b进行赋值,那么这

2022-05-06 00:03:23 569

原创 spring源码注册需要销毁的bean registerDisposableBeanIfNecessary

前篇文章传送门咱们上篇了解bean的初始化,大家可以想下,bean为什么要销毁?用完不再使用的bean指定了destroy方法的bean执行destroy方法容器关闭spring把需要销毁的bean注册到哪里呢?disposableBeans = new LinkedHashMap<>();在何时进行销毁的?registerDisposableBeanIfNecessary 注册需要被销毁的beanprotected void registerDisposableBeanI

2022-05-05 11:21:41 212

原创 spring源码执行bean的init方法 initializeBean

前篇文章传送门前两篇了解了bean的属性性赋值,这个过程如果字段是引用类型的对象,那么spring会去工厂中查找,如果查找不到,再去执行工厂创建bean的那套流程,现在属性赋值完成了后,接下来开始执行init方法了。那么执行init方法前后会做哪些事情呢?invokeAwareMethods Aware接口是做什么的?postProcessBeforeInitialization 作用是什么?什么时候执行init方法?applyBeanPostProcessorsAfterInitializa

2022-05-04 14:22:13 1702

原创 spring源码对属性赋值 populateBean (XML)

前篇传送门上篇文章了解了spring注解是如何进行赋值操作,接下继续看看xml配置是如何进行赋值的先想一个问题,xml中配置有哪些类型?RuntimeBeanReference bean对象RuntimeBeanNameReferenceBeanDefinitionHolderBeanDefinitionDependencyDescriptorManagedArray 数组ManagedList List集合ManagedSet set集合ManagedMap mapManaged

2022-05-03 18:33:34 674

原创 spring源码对属性赋值 populateBean(注解)

前篇文章传送门上篇咱们聊到了bean的实例化,在里面了解常见的几种实例化bean的方式,那么bean实例化完成只是一个空的bean,一个空属性的bean对于咱们来说没什么实际意义的。接下来咱们来了解bean的属性是如何进行赋值的。咱们如何给对象赋值的呢?咱们平常开发中给对象赋值无非两种方式通过构造器通过set方法那spring是如何做的呢?属性有哪些类型呢?咱们继续看看spring源码中是如何进行赋值的hasInstantiationAwareBeanPostProcessors 修改

2022-05-02 11:19:40 626 1

原创 spring源码合并bean定义信息 applyMergedBeanDefinitionPostProcessors

上篇咱们聊到了bean实例的创建,按照流程图上面接下来应该进行属性填充了。这在里咱们思考一个问题,咱们@Autowired,@Value,@Resource,@PostConstruct,@PreDestroy是什么时候处理的呢,假如xml中配置了,注解也配置了,应该怎么处理呢?AutowiredAnnotationBeanPostProcessor 处理@Autowired和@Value注解bean定义信息CommonAnnotationBeanPostProcessor 处理@Resource、@

2022-04-25 23:52:07 759

原创 记录短信模块系统设计,采用redis队列(SMS)

本章内容是完整流程,只对粉丝开放背景随着系统用户越来越多,业务流程越来越完善,但同时也暴露出了一些问题,比如,关键的流程节点用户比较关注,可能会涉及到时效性,用户只有登录到系统才能看到流程阶段信息。为了解决流程关键节信息差,时效性差等问题,项目决定对接短信。业务模块:目前项目业务模块分为三个部分,以后有可能会增加其他模块。AA 模块BB 模块CC 模块表设计sms_config:短信配置表,用于存储短信提供方模板标识和占位符参数获取方法sms:短信表,用于存储短信内容相关信息

2022-04-22 22:02:55 1741

原创 spring源码实例化bean createBeanInstance

前篇文章传送门上篇咱们聊到了doCreateBean方法,在里面了解到先进行获取bean的实例,然后给属性赋值,再调用bean的初始化方法,如果需要的话会把bean注册到销毁容器中。接下来咱们了解下实例化的流程spring实例化有哪些方式可以试想下,如果让咱们自己实现实例化bean,会如何做?通过supplier通过FactoryBean通过构造方法(反射)…源码protected BeanWrapper createBeanInstance(String beanName, Root

2022-03-24 22:46:05 578

原创 spring源码实例化剩余的bean finishBeanFactoryInitialization

前篇文章传送门咱们前面了解了spring容器创建,然后加载了bean的定义信息,执行了BDRPP,执行了BFPP,注册了BPP,前面的这么多步骤,就是为了创建Bean实例并初始化,接下来咱们了解剩下的流程概括咱们都知道,前面的步骤创建了很多内部使用的bean,但是真正咱们使用bean大部分没有创建,为什么说大部分呢,因为BDRPP、BFPP、BPP这个时间已经创建完了,并且BFPP已经执行完了。说了这么多没用的,咱们看下剩下的流程吧getBeandoGetBeangetSingletoncr

2022-03-22 00:00:42 425

原创 spring 源码注册BPP-registerBeanPostProcessors

上篇传送门前两篇咱们了解了component-scan和其他一些注解的解析成bean定义信息的过程,前者是通过XML的方式loadBeanDefinition,后者通过ConfigurationClassPostProcessor来实现,那么这时候,bean的定义信息基本上算是完成了,接下来进行注册BPPBPP就是用来拦截bean的创建,在初始化前后进行增强,具体细节咱们后面会详聊获取所有BPP的bean名称创建一个BeanPostProcessorChecker遍历BPP名称分组并实例化注

2022-03-20 21:16:50 609

原创 spring 源码执行BFPP invokeBeanFactoryPostProcessors-ConfigurationClassPostProcessor (2)

上篇传送门上篇介绍了component-scan标签的解析,把扫描到的@Component类文件扫描到,然后生成bean定义信息并注册到工厂,工厂注册完后,又注册了注解解析内部定义信息(后置处理器)以及监听器,接下来咱们继续看下是如何执行后置处理器的...

2022-03-20 16:13:05 325

原创 spring源码TX 事务环境准备

源码构建准备事务环境之前,必须要保证aop环境gradle配置dependencies { compile(project(":spring-beans")) compile(project(":spring-core")) compile(project(":spring-context")) compile(project(":spring-webmvc")) compile(project(":spring-jdbc")) compile(proj

2022-03-18 11:44:15 333

原创 spring源码AOP环境准备

还没构建源码可以参考文章构建学习aop源码之前首先需要有环境,很多小伙伴可能会卡在这里,接下来咱们看看aop的配置前提已经安装了aspectj-1.9.3.jar,没有安装的参考上面的链接gradle配置到你测试工程下找到build.gradle文件修改配置找到文件的最下方,添加依赖dependencies { compile(project(":spring-beans")) compile(project(":spring-core")) compile(pro

2022-03-18 11:01:17 490

原创 spring源码加载bean定义信息 loadBeanDefinitions-自定义标签解析(component-scan-2)

上篇传送门上篇大体了解了下执行BFPP的过程,BFPP的作用也介绍了,但是并没有深入看下如何实现的,接下来咱们了解下context:component-scan 标签是如何解析的概述咱们开发过程中会使用到很多的注解配置等,这些注解必须要被扫描到才能被识别spring中标签分为几种分为两种标签自定义标签(除了bean标签外)源码之前先了解两个类DefaultBeanDefinitionDocumentReader 调度者BeanDefinitionParserDelegate 解析策

2022-03-15 16:39:24 563

原创 spring 源码执行BFPP invokeBeanFactoryPostProcessors (1)

上篇传送门上篇咱们了解了工厂创建,bean定义信息的加载,这篇咱们来探索下BFPP源码之前先了解两个接口的作用BeanFactoryPostProcessor 对BeanDefinition进行增强BeanPostProcessor 对bean的初始化前后进行增强AbstractApplicationContext.invokeBeanFactoryPostProcessors 执行BFPPprotected void invokeBeanFactoryPostProcessors(Conf

2022-03-13 16:49:23 901

原创 spring源码加载bean定义信息 loadBeanDefinitions

上编文章咱们已经把工厂容器准备好了,那么既然是容器就会存放数据,它是怎么存放的呢?咱们先看下bean定义信息的类关系loadBeanDefinitions这个方法调用比较深,过渡流程AbstractXmlApplicationContext.loadBeanDefinitions 创建bean定义信息的读取器AbstractXmlApplicationContext.loadBeanDefinitions(beanDefinitionReader)使用读取器进行加载bean的定义信息Abst

2022-03-07 12:48:55 404

原创 spring 源码通过xml方式容器刷新前的准备

简介spring大体可以分为两个路线,一个是容器(DefaultSingletonBeanRegistry),一个是应用上下文(ApplicationContext),它们都是子BeanFactory的实现DefaultSingletonBeanRegistry 用于缓存bean定义信息及beanApplicationContext 上下文,用于保存spring应用过程的信息接下来是以XML解析的方式深入探索源码还没有构建的可以参考ClassPathXmlApplicationContex

2022-03-06 15:39:07 335

原创 MQ如何保证分布式事务

什么是分布式事务?多个库实例实现ACID下面咱们思考几个问题:数据库如何实现事务?undo log+redo log+MVCC多个数据库实例共享undo、redo、mvcc吗?不共享既然多个库事务相互隔离,那如何保证多个库之间数据一致?相信大家猜到了,一个应用系统多个数据库实例保证数据一致性就是分布式事务。分布式事务演变(软状态)基本实现首先咱们先看一张图正常情况假设DB1和DB2不存在任何问题,且应用系统不会挂机1、同时开启DB1和DB2事务2、执行sql语句3、未出现异

2022-03-05 16:04:27 2531

原创 spring源码大体了解

简介相信大家都在使用spring,也都知道spring是做什么的,有哪些模块,也都知道spring最重要的两个核心功能IOC,AOP,那么他是怎么实现的呢,为什么spring构建的是生态呢?,接下来咱们一起探索下这两个模块。IOC 控制反转,依赖注入控制反转什么是控制反转呢,到底是谁控制了谁?控制反转:本来需要咱们自己创建的对象交给spring去创建。比如:咱们xml标签配置的标签、@Bean、@Service …,这些对应的类都会被spring创建成对象,放到spring容器中,等咱们使用的就

2022-03-04 16:06:09 443

原创 arthas简单使用

arthas 解决了哪些问题?看看官方的回答这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到JVM的实时运行状态?怎么快速定位应用的热点,生成火焰图?怎样直接从JVM内查找某个类的实例

2022-03-01 10:45:49 588

原创 postgresql批量更新表中某个字段

最近项目新需求,原表不满足现有的业务,需要增加字段,增加字段会涉及到历史数据的校正,之前没遇到过类似的情况,记录下过程表结构idforeignkeycreatetimenum112022-02-18 12:12:12null212022-02-17 12:12:12null312022-02-16 12:12:12null412022-02-15 12:12:12null522022-02-18 12:12:12462

2022-02-18 18:37:15 4469

原创 Google Authenticator集成java

背景最近公司要求所有内网未集成单点的系统做双因子验证,为了节约成本,最终选择Google Authenticator原理使用密钥和时间戳通过一种算法生成一个6位数字的一次性验证码集成流程1、下载Google Authenticator2、生成Secret3、用户扫描二维化进行绑定(也可以拿到密钥手动绑定)4、输入用户名、密码、动态码5、登录成功集成流程图代码import org.apache.commons.codec.binary.Base32;import org.apa

2021-12-23 18:05:55 1907 1

原创 SpringMVC执行流程

简介咱们都知道,springmvc是客户端和服务端的桥梁,那么它是怎么运行的呢?类图大家都知道,springmvc的核心处理类是DispatcherServlet,它是如果被执行的?从下图可以看出,DispatcherServlet继承了FrameworkServlet而FrameworkServlet继承了HttpServletBean,实现了ApplicationContextAwareHttpServletBean继承了HttpServletHttpServlet继承了GenericSe

2021-12-08 13:23:06 1682

原创 Mysql主从复制

概述复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志文件重新执行,从而得从库和主库的数据保持同步mysql支持一台主库同时向多台从库进行复制,从库同时也可以作为其他服务器的主库,实现链状复制原理1、Master主库在事务提交时,会把数据变更作为时间Events记录在二进制日志文件Binlog中2、主库推送二进制日志文件Binlog中的日志事件到从库中继日志Relay Log3、slave重做中继日志的事件,将改变反映它自己的数据优势主库出现问

2021-12-06 12:52:08 109 1

原创 Mysql事务

简介事务是由一组sql语句组成的逻辑处理单元事务四个特性原子性(Atomicity): 要么都成功要么都失败 undo log实现一致性(Consistent): 如转账前后两个数额总合保持不变隔离性:数据库提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境下运行 锁,mvcc多版本并发控制持久性:事务提交持久化磁盘 redo log事务隔离级别数据库的事务隔离级别有四种,分别是读未提交,读已提交,可重复读,序列化,不同的隔离级别会产生脏读,幻读,不可重复读等相关问

2021-12-05 12:03:09 1652 2

原创 Mysql锁

锁的概述锁是计算机协调多个进程或线程并访问某一资源的机制在数据库中,除传统的计算机资源(如cpu、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源,如果保证数据并发访问的一致性,有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素,从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂锁分类对数据库操作的粒度分表锁: 操作时,会锁定整个表行锁: 操作时,会锁定当前操作行对数据操作的类型分读锁(共享锁): 针对同一份数据,多个读操作可以同

2021-12-04 19:48:48 741

原创 Mysql并发参数调整

查询缓存优化不建议使用,一般是在应用服务做缓存层,毕竟数据并发能力是有限的概述当开始Mysql的查询缓存,执行相同的sql语句的时候,服务器就会直接从缓存中读取结果,当数据被修改,之前的缓存会失效,修改比较频繁的表不适合做查询缓存查询流程1、客户端发送一条查询给服务器2、服务器先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果,否则进入下一阶段3、服务器端进行sql解析、预处理、再由优化器生成对应的执行计划4、根据生成的执行计划,调用存储引擎的Api来执行查询5、将结果返回给

2021-12-04 14:05:43 847

原创 Mysql sql优化

为什么要优化sql随着生产环境数据量的急剧增长,很多sql开发逐渐出现性能问题,对生产的影响越来越大,sql语句成为整个系统的瓶颈查看sql执行频率show global status 'Com_______'查看全局的执行频率show global status like ‘Inodb_rows_%’定位低效率执行sql1、开启慢查询日志2、show processlist查看当前mysql在进行的线程,包括线程状态,是否锁表等,可以实时地查看sql的执行情况同时对一些锁表操作进行优化

2021-12-03 22:06:18 200

原创 spring源码构建mac和windows通用

环境准备JDK8源码导入后,mac默认使用的是openjdk8,不要切换idea 2019.xgradle-5.6.41、官网下载2、选择 gradle-5.6.4-bin.zip3、解压4、配置环境5、验证win+Rcmdgradle -v6、配置镜像地址在gradle-5.6.4\init.d下创建文件init.gradle把下面内容粘贴进去allprojects{ repositories { def REPOSITORY_URL = 'h

2021-12-03 13:06:12 410

原创 Mysql索引

索引概述索引是帮助Mysql高效获取数据的数据结构(有序),索引每个节点维护着表中数据的引用索引的优势劣势优势类似书籍的目录索引,提高数据检索的效率,降低数据库的IO成本通过索引列对数据进行排序,降低数据排序成本,降低cpu消耗优势索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录索引列也是要占用空间的(磁盘)虽然提高了查询效率,同时降低了更新表的速度,对表进行insert、update、delete时要对索引键值变化做调整索引结构索引是在Mysql的存储引擎层中实现的

2021-12-02 19:39:53 276

原创 Mysql视图、存储过程、函数、触发器

视图视图概述视图是一种虚拟的表。视图并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,通俗讲,视图就是一条select语句执行后返回的结果集。视图相对普通表的优势 简单:使用视图的用户完全不需要关心后面对应的表的结构,关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问着的影响 安全:使用视图的用户只

2021-12-02 12:46:30 366

原创 Mysql安装

方式一查看系统中挂载的低版本安装包 rpm -qa | grep -i mysql卸载低版本 rpm -e mysql-5.1.71 --nodeps安装mysql依赖包 yum -y install libaio.so.l libgcc_s.so.l yum update libstdc++-...安装客户端 rpm -ivh Mysql-client.....rpm安装服务端 rpm -ivh Mysql-server.....rpm启动mysql service mysql st

2021-12-01 20:24:07 218 1

原创 Mysql简介

体系结构mysql是一个关系型数据库,咱们先了解下它的体系结构connectors客户端层native C API 、JDBC、ODBC、.NET、PHP、Perl、Python、Ruby、Cobolmysql serverManagement Services & Utillties管理服务和工具服务 Connection Pool连接池、安全管理、链接管理、用户管理、认证管理 sql控制 SQL Interface DDL、DML 、存储过程、触发器等 Parser 对s

2021-12-01 13:08:29 1249

空空如也

空空如也

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

TA关注的人

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