自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 springboot 开启缓存 @EnableCaching(使用redis)

启动类上 加 @EnableCaching 注解。

2024-05-13 19:34:12 541 1

原创 SpringBoot整合knife4j (swagger2规范)接口文档

我本人使用的是springboot 2.7.18 swagger2规范。Controller类上 与 @RestController 平齐。Controller类上 中的某个方法上,用于方法的说明。建议继续使用swagger2 规范,因为国内用的更多。entity 实体类中的属性,可标注属性的必填性。entity 实体类上 与 @Data 平齐。注意要指定tags 不然无法生效。以上四个是最常用的注解了。

2024-05-13 16:15:32 347

原创 mysql 日志详解

bin log 二进制日志(归档日志) 主要用于 备份和迁移 属于mysql级别的日志redo log (重做日志)用来实现事务的持久性,当事务提交之后会把所有修改信息都会存到该日志中。主要用于崩溃恢复,属于InnoDB存储引擎的日志undo log(回滚日志)用于记录数据被修改前的信息。主要用于事务的回滚、MVCC。MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。

2024-05-12 19:59:02 620

原创 java 动态代理详解

CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB 是一个好的选择。

2024-05-12 19:36:37 163

原创 MVCC 详解

MVCC,全称 Multi-Version Concurrency Control,即多版本并发控制MVCC的目的主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁。这里的多版本指的是数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在。

2024-05-12 06:59:53 624

原创 springboot 定时任务解决方案

原因:@Async的使用场景和这个不同,用在这里并不合适,虽然也会实现多线程,但是会产生任务重复执行的问题,也会使 fixedDelay策略失效。),fixDelay,fixRate 等类型(方法上,需先开启计划任务的支持)。基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。@EnableScheduling注解: 在配置类上使用,开启计划任务的支持(类上)。在实际项目中,90%都是用的XXL-JOB,因为它易用性最好。

2024-05-11 19:13:03 182

原创 springboot 日志详解

客户需求: 要对几个关键的业务功能进行操作日志记录,即什么人在什么时间操作了哪个功能,操作前的数据报文是什么、操作后的数据报文是什么,必要的时候可以一键回退。以上配置会在项目根目录的同级目录下生成 log/{日期}.log 的日志文件, 若打成 .jar包运行, 则日志文件会生成在 . jar 文件的同级目录下。2、把业务操作日志注解标记在需要进行业务操作记录的方法上(在实际业务中,一些简单的业务查询行为通常没有必要记录);1、定义业务操作日志注解,注解内可以定义一些属性,如操作功能名称、功能的描述等;

2024-05-11 08:13:45 806

原创 springboot 序列化和反序列化

在Java中,序列化和反序列化是一种将对象转换为字节流或将字节流转换为对象的机制。通过序列化,可以将对象存储到文件中、传输到网络上,或者在分布式系统中进行对象的传递。本文将详细介绍Java序列化和反序列化的原理、使用方法和常见应用场景,并提供一些示例代码。

2024-05-09 11:19:01 938

原创 过滤器和拦截器的区别

过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,然后通过 FilterRegistrationBean() 类将过滤器添加进入系统。然后实现WebMvcConfigurer接口 ,重写 addInterceptors()方法,将自定义拦截器注册进入系统配置。实现HandlerInterceptor 接口,请求的拦截是通过HandlerInterceptor 来实现,类似AOP,在Controller层方法调用之前,调用一些方法。

2024-05-03 14:11:12 493

原创 spring ioc 容器加载过程 refresh() 方法详解

注册监听器,在所有注册的bean中查找Listener bean,注册到消息广播器中,即向监听器发布事件。beanFactory的后置处理器,空方法,具体由子类实现。配置文件解析器,如将配置文件中的 bean 信息解析成对应的 BeanDefinition 对象。刷新并获取刷新后的 BeanFactory,将配置文件解析为BeanDefinition对象。初始化所有的非懒加载的单实例bean(bean的生命周期实例化 属性注入 初始化 完成)。空方法,由子类实现,使用设计模式中的模板方法,是一个钩子函数。

2024-05-02 16:29:25 674 1

原创 spring boot 启动流程详解

getSpringFactoriesInstances() 方法根据指定的Class类型从META-INF/spring.factories 中获取相应的自动配置类。SpringApplication的构建都是为了run()方法启动做铺垫,最重要的部分就是设置应用类型、设置初始化器、设置监听器。初始化器(ApplicationContextInitializer): 初始化某些 IOC容器刷新之前的组件。上面分析了SpringApplication的构建过程,一切都做好了铺垫,现在到了启动的过程了。

2024-05-02 09:37:34 1016

原创 ruoyi-vue-plus RepeatSubmit源码解读 实现防重复提交

查询和删除是天然的幂等操作,故一般不建议使用。在有更新和写入的操作时,建议使用,例如订单提交,修改订单状态。幂等性: 多次执行的结果和一次执行成功的结果对资源的作用是相同的,这里的资源一般指的是数据库的数据。同一个用户的统一操作, 在规定的时间内 只能做一次相同数据的请求,防止重复提交,超时重试等一些问题。interval 间隔时间 默认单位是ms message 为默认返回信息。使用 拦截器 + 过滤器 实现的。程序控制和资源(数据)控制。

2024-05-02 07:25:19 347

原创 springboot 自动配置源码解读

当我们程序依赖第三方功能组件时,不需要手动将这些组件类加载到IOC容器中。例如 当程序需要用到redis时,在pom.xml文件中引入依赖,然后使用依赖注入的方式直接从IOC容器中拿到相应RedisTemplate实例。

2024-05-01 10:18:03 873

原创 spring boot 自定义starter示例

在创建一个自定义的Starter项目时,我们需要编写一个属性类,用来定义我们要集成的功能模块所需的配置项,并且使用@ConfigurationProperties注解来指定用户配置文件中的前缀。在resources/META-INF目录下创建一个名为spring.factories的文件,用来指定我们的自动配置类,让Spring Boot能够在启动时自动扫描并加载它。在创建一个自定义的Starter项目时,我们需要编写一个自动配置类,用来根据属性类和业务功能类,创建相应的Bean对象。

2024-05-01 08:48:56 1378 1

原创 Spring 如何解决 Bean 循环依赖

项目中存在Bean的循环依赖,是Bean对象职责划分不明确、代码质量不高的表现,如果存在大量的Bean之间循环依赖,那么代码的整体设计也就越来越糟糕。-> 从三级缓存中获取bean工厂,通过getObject() 方法,获取对象,放到二级缓存->当前bean引用二级缓存中的bean->最后再对二级缓存中的bean进行属性装配。bean A 属性注入时依赖bean B ,并且bean B属性注入时也依赖bean A ,造成 bean A 和bean B 都无法完成初始化问题,形成了闭环。

2024-04-30 20:53:27 292

原创 ERP 系统业务流程概述

一般制造企业(eg 工厂) 会生产相应的产品进行销售进而实现盈利。制造企业大部分基本的业务流程是一样的。都会有 销售部、采购部、生产部、仓管部和财务部,大部分的业务都是围绕这几个部门进行展开的。最近在学习了解企业资源计划系统(Enterprise Resource Planning) 简称ERP系统。下面我会定期分享和记录我的收获。销售(Customer Relationship Management,简称CRM系统。库存 ( Warehouse Management System 简称WMS系统。

2024-04-29 16:29:47 296

原创 spring aop 详解

使⽤ AOP 可以扩充多个对象的某个能⼒,AOP 可以说是 OOP 的补充和完善(比如 现在要实现的业务和这个通用的功能没什么关系,但处于安全考虑,又必须进行登录的验证)定义 AOP 是针对某个统一的功能的,这个功能就叫做一个切面,比如用户登录功能或方法的统计日志,他们就各是一个切面。切点的作用就是提供一组规则来匹配连接点,给满足规则的连接点添加通知,总的来说就是,定义 AOP 拦截的规则的。环绕通知:@Around:通知包裹了被通知的方法,在被通知的方法通知之前和调用之后执行自定义的行为。

2024-04-29 10:52:38 210 2

原创 spring bean 生命周期

简而言之,bean 是由 Spring IoC 容器实例化、组装和管理的对象。对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。而 Spring 中的对象是 bean,bean 和普通的 Java 对象没啥大的区别,只不过 Spring 不再自己去 new 对象了,而是由 IoC 容器去帮助我们实例化对象并且管理它,我们需要哪个对象,去问 IoC 容器要即可。

2024-04-29 08:41:34 515

原创 spring 事务详解

spring 事务有两种 注解型事务和编程式事务。

2024-04-28 18:34:43 974 1

原创 dbeaver数据库语言编辑器设置jdbc驱动

找到mysql驱动对应的maven工件地址 复制进去然后确认就行了。双击 MySQL -> 库 -> 添加工件。然后 打开maven组件库。数据库 -> 驱动管理器。

2024-04-14 22:18:42 398

原创 在Ubuntu上搭建Prometheus + Grafana监控系统

服务文件告诉systemd,您将Prometheus作为prometheus用户运行,并且配置文件位于/etc/prometheus/prometheus.yml目录中,并将其数据存储在/var/lib/prometheus目录中。因为Prometheus只抓取在其配置文件scrape_configs部分中定义的导出器,所以我们需要为Node Exporter添加一个条目,就像我们为Prometheus本身所做的那样。输出结果会告诉您Prometheus的状态,主进程标识符(PID),内存使用等。

2024-04-08 12:34:45 909

原创 Invalid bound statement (not found)的原因以及解决方法

1.首先查看mapper接口的方法名和xml中sql语句中id是否对应的上,若可以则是mapper.xml文件没有找到,在application.yaml文件中配置 xml 读取参数。这个问题很直观是mapper文件和映射文件 mapper.xml文件没有匹配上导致的。--------------以上两种方式都解决不了----------------经过半天的排查错误,主流的解决方法都试过了,想提出一个容易遗漏的点。/*Mapper.xml 代表匹配到xml文件的前缀。/**/ 代表文件夹的名称。

2024-03-06 18:50:45 436

原创 mybatis不重复列插入例子详细说明

之前有做过不重复列插入的需求,当时是 在插入时判断 对应的列在数据库中有没有对应的数据 有则返回false 无则插入,但是这加大了数据库的查询负担 也增加了插入的时间,故今天研究一下 使用sql来简化了这一点。调用此方法实现功能(当前本人使用的框架是 mybatisFlex)使用mybatis 自定义的sql来实现 功能。使用的知识点是 daul表。

2024-03-05 12:51:26 141

原创 vue响应式详解

我们都知道,vue是基于javascript的,那我们使用一段javascript代码来描述响应式c = a + b;console.log(c) // 输出 2// 改变 a的值a = 3;// 重新给c赋值 即把 c = a + b;再执行一遍c的值才能变为 4// 再次输出cconsole.log(c) // 输出 2看到没有,c的值并没有随着a的值或者b的值的改变而改变,这就不是响应式的。

2023-09-05 10:20:46 566

原创 VScode 国内下载源 以及 nvm版本控制器下载与使用

注:如果没有先设配置 npm 的镜像地址的话,可能出现在用nvm安装node成功后,npm不能用的问题,所有要先配置 node 和 npm 的镜像地址,然后再去用nvm安装node版本!下载链接 https://hub.nuaa.cf//coreybutler/nvm-windows/releases。进入官网 https://code.visualstudio.com/ 点击下载。复制下载链接到新的浏览器标签。配置nvm的settings。

2023-08-30 10:24:56 2371

原创 解决win10无法调节系统亮度的问题

1. 下载相应的驱动和软件驱动下载 https://www.intel.cn/content/www/cn/zh/download/715571/intel-graphics-dch-driver-for-intel-nuc11at-products.html2.CareUEyes 下载 https://care-eyes.com/2. 将下载好的驱动解压 然后安装 即可

2023-08-29 13:15:21 261

原创 java stream流失操作 anyMatch和 allMatch实战

有一个需求,需要判断List集合中某个字段值满足一定条件就做相应的处理。

2023-08-22 09:00:52 354

原创 sql A表(含有部分B表字段) 向B表插入A表数据

今天遇到一个数据库插入问题 向表中插入 生产状态 为 2 的数据 但生产状态为改为12 的所有数据查看网上的评论这样就可以a,b字段是插入指定某个值,而C字段则用表a的c字段.最后解决了。忽然想起原来也有这个问题。

2023-08-15 16:08:28 1139

原创 sql update进行连表更新

【代码】sql update进行连表更新。

2023-08-12 15:57:05 452

原创 数据库锁表 Lock wait timeout exceeded; try restarting transaction

【代码】数据库锁表 Lock wait timeout exceeded;

2023-08-12 15:54:51 885

原创 github 镜像站及下载加速网址

利用 Cloudflare Workers 对 github release 、archive 以及项目文件进行加速,部署无需服务器且自带CDN.只需复制当前 GitHub 地址粘贴到输入框中就可以代理加速下载!

2023-08-12 12:52:17 29699 2

原创 sql 语句 字段字符串操作

concat() 函数 字段属性值连接。

2023-08-09 14:34:48 984

原创 linux 配置java环境变量

立即生效使用 source 命令。

2023-08-08 10:57:34 348

原创 mysql sql 语句sum求和嵌套数学表达式

今天有个需求, 已减高度 = 高度 x 单双开(单开1 双开2) x 2,要直接写在sql语句中。

2023-08-03 09:47:00 1007

原创 easyexcel 将对应列的格式改为数字或者文本格式

easyexcel 导出设置列的格式

2023-07-26 09:02:02 4104 2

原创 vue2路由传参

vue 路由传参

2023-07-21 09:38:16 109

原创 myabtis-plus 自定义列和自定义sql语句

mybatis-plus 自定义列 和sql语句

2023-07-17 08:56:38 202

原创 linux 定时任务

linux 定时任务

2023-07-17 08:44:03 264

原创 hutools 新对象的值替换老对象的值(提高编写代码效率)

hutools 简化对象赋值

2023-07-15 17:33:17 317

原创 java 集合stream流的妙用

集合stream 流的妙用

2023-07-10 10:31:01 230

空空如也

空空如也

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

TA关注的人

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