- 博客(99)
- 收藏
- 关注
原创 MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决
MyBatis-Plus的PaginationInnerInterceptor依赖jsqlparser 4.5+,而PageHelper可能引入旧版本(如3.2),导致方法缺失。:PageHelper通过ThreadLocal保存分页参数,若未清除,会影响后续IPage查询。:PageHelper和MyBatis-Plus的分页拦截器均会修改SQL,导致分页逻辑被覆盖。
2025-03-28 18:07:24
329
原创 解决手贱复制黏贴修改了 MySQL 中的 user 表信息导致连接不上,出现`Access denied for user ‘root‘@‘localhost`的问题
手动修改 MySQL 中 user 表数据后,导致出现`Operation ALTER USER failed for 'root'@'localhost'`的错误,以及各种尝试后的感悟
2023-08-03 09:52:01
618
转载 Spring 中 @Value生效场景(取值为null)
在我们开发项目过程中,经常会通过 @Value(“${xxx}”) 注解方式从属性文件中获取配置信息,但是,稍不注意,获取的值就为 null, 下面列举一下这种情况的注意事项。
2023-01-12 14:32:32
1113
原创 SpringBoot 转发请求至指定页面
请求转发到指定页面,如浏览器输入http://127.0.0.1:8888/office/schdule/index/ 后弹出新页面,页面地址还是http://127.0.0.1:8888/office/schdule/index/
2022-11-01 06:00:00
2936
原创 window 自启动程序并定时检测进程(SpringBoot 项目)
自启动程序附带保活机制,即程序在服务器重启后自动启动,且定时检测程序是否存活,异常后则重启。
2022-10-27 16:02:05
2703
原创 MySQL 创建表时出现 Tablespace for `xxx`.`xxx` exists.
但在 SQLyog 上查看时却是不存在的。这是因为 MySQL 异常停止后,导致某些文件丢失或损害引起的,具体为什么会到至 MySQL 异常停止,只能进一步查看。本地 MySQL 异常停止后,手动启动服务,热庵后执行 sql 脚本时,发现又报错信息,于是手动创建表,发现还是无法创建,报了。表空间已存在,在导入数据之前需要将表空间释放掉。
2022-09-02 14:35:48
3379
3
原创 动态设置定时任务(数据库持久化定时信息,Springboot 整合quartz)
1、场景 1.1 发布消息、问卷等信息时,发布者可以指定星期、月份的具体时间进行定时发布(cron 触发器) 1.2 设置当天或指定日期的时间范围内,指定时间间隔执行任务。(目前该功能未研究,可参考如下说明即可实现。) 1.3 其他定时功能可根据不同的任务触发器进行实现。(未研究)2、定时任务框架(Quartz )2.1 选型 简单地使用注解方式的定时任务已无法满足上述场景需求。网上也找了很多定时框架,如 cn.hutool(Java 工具类库)、XXL-JOB,hutool 研究一下感
2022-04-20 16:37:50
5073
14
原创 依赖冲突查找与解决办法(以EasyPoi为例,出现 NoSuchMethodError 或 NoClassDefFoundError )
1、问题 最近学习了 EasyPoi,相对原生的 poi 来说,操作更加的方便。因此想升级一下项目中 excel 的导入功能,但是编写完成后,测试了一下发现报错了:is java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Cell.getCellType()。2、代码结构2.1 pom.xml 原本项目中存在 org.apache.poi,现想引入 EasyPoi,但不影响原先功能。主要相关依赖如下: <!--
2022-03-02 14:54:50
4297
原创 MySQL 中文字段排序问题(根据中文拼音排序)
1、问题 最近遇到个问题,就是根据标题进行排序,却无法达到想要的结果。2、分析与解决 查看了一些资料,这是因为 MySql 字段编码的问题。标题字段使用的是 UTF-8 的编码格式,排序规则用的是 utf8_general_ci,这种编码格式不是根据中文拼音来排序的,因此达不到想要的结果。2.1 方法一 可以在 sql 上将需要排序的字段转为 GBK 编码格式。如下:select id,title from news order by convert(title using gbk) d
2022-02-27 17:21:58
1298
原创 前端请求进入后端,异常捕获返回结果后前端却显示跨域
1、前言 后端是 Springboot 项目,通过自定义拦截器进行 token 校验,校验不通过则抛出异常让全局捕获异常返回。自认为逻辑相当合理,且 postman 都已测试过没问题。 然后问题来了,前端通过 ajax 请求,请求到了后端校验了 token,抛出了自定义异常后被捕获返回了,这些步骤都有了,但是前端却显示跨域。Access to XMLHttpRequest at ‘http://192.168.129.155:9999/affairs/api/commons/locker/che
2021-10-21 16:16:59
2272
4
原创 List 交集、并集、去重、抽取、修改属性、排序等常用操作
1、两集合数据的交集和并集 List<Integer> oneList = new ArrayList<>(); oneList.add(1); oneList.add(2); List<Integer> towList = new ArrayList<>(); towList.add(1); towList.add(3); List<Inte
2021-09-08 17:34:32
964
原创 SpringCloud 分布式配置中心(Config)
1 介绍 在微服务中起码有几十上百的服务,每个服务都有自己的配置文件。若需要修改,则特别麻烦。 Spring Cloud Config 为微服务提供集中化的外部配置支持,配置服务器为各个不同的微服务应用的所有环节提供了一个中心化的外部配置。如下图所示: SpringCloud Config 分为服务端和客户端两部分。 服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息、加密、解密信息等访问接口。 客户端则通过指定的配置中心来管理应用资源,
2021-06-06 18:50:36
288
8
原创 SpringCloud API 网关(Zuul)
1 介绍 API 网关是对外服务的一个入口,其聚合内部服务,提供统一对外的 API 接口给前端系统,屏蔽内部实现细节,可以为我们管理大量的 API 接口,还可以对接客户、适配协议、进行安全认证、转发路由、限制流量、监控日志、防止爬虫、进行灰度发布等。 Zuul 是一个基于 JVM 路由和服务端的负载均衡器,提供路由、监控、弹性、安全等方面的服务框架。其核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:动态路由:动态地将客户端的请求路由到后端不同的服务器,做一些逻辑处理,比如聚合多个服务的
2021-05-30 22:10:36
593
8
原创 SpringCloud 数据监控(Hystrix Dashboard )
1 介绍 微服务中使用 Hystrix 进行服务容错外,还有提供了实时监控功能。Hystrix Dashboard 是一款针对 Hystrix 进行实时监控的工具,通过 Hystrix Dashboard 我们可以在直观地看到各 Hystrix 的请求响应时间, 请求成功率等数据。2 整合 Dashboard 在需要监控的项目里修改如下信息:2.1 pom.xml <dependency> <groupId>org.springframewor
2021-05-30 02:27:03
767
原创 SpringCloud 服务熔断降级(Hystrix)
1 介绍1.1 服务雪崩 多个微服务之间调用的时候,假设服务 A 调用服务 B 和服务 C,如果在这条链路上某个服务的调用响应时间过长或不可用,对服务 A 的调用就会占用越来越多的资源,进而导致其他服务不可用,引起系统崩溃,也就是“雪崩效应”。1.2 Hystrix Hystrix 是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统中,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix 能够保证在一个依赖出现问题的情况下,不会导致整体服务的失败,避免级联故障,以提高分布式系统
2021-05-27 22:16:48
342
2
原创 SpringCloud 负载均衡(Feign)
1 介绍 Feign 是一个声明式的 REST 客户端,它能让 REST 调用更加简单。Feign 提供了 Http 请求的模板,通过编写简单的忌口和插入注解,就可以定义好 Http 请求的参数、格式、地址等信息。 之前使用的是 RestTemplate 访问 Rest 服务,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。 而 Feign 会完全代理 Http 请求,我们只需要湘调用方法一样调用它就可以完成服务请求及相关处理。Feign 可
2021-05-27 14:05:18
824
2
原创 SpringCloud 负载均衡(Ribbon)
1 负载均衡1.1 图解 上图所示,如果客户在不同时间段访问,将会导致不同服务器在某个时间段的压力会很大,而在某个时间段某些服务器又很空闲导致资源的分配不合理而影响体验。 因此如上图需要有个中间件来处理请求的分发。让资源得到充分利用。这就是负载均衡,即将用户请求平躺的分配到多个服务上,从何达到系统的高可用。1.2 分类集中式:即在服务的消费方和提供方之间使用独立的负载均衡设置,如 Nginx(方向代理服务器),由该设施负责把请求通过某种策略转发至服务的提供方。进程式:将负载均衡集成
2021-05-27 01:13:06
298
原创 Eureka 和 Zookeeper 的区别(CAP)
1 CAPC(consistency)强一致性A(Availability)可用性P(partition tolerance)分区容错性1.1 概念 CAP 原则又称 CAP 定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。1.2 核心 根据 CAP 原理,将 NoSQL 数据库分成了满足 CA 原子,满足 CP
2021-05-26 17:54:25
592
原创 SpringCloud 之服务注册与发现(Eureka)
1 总工程项目 创建 springcloud 总工程项目。2 Eureka 创建 springcloud-eureka 模块。2.1 pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi
2021-05-23 23:56:02
403
5
原创 SpringCloud 服务提供者与服务消费者
1. 总工程 创建 springcloud 总工程项目。1.1 pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.or
2021-05-23 00:27:01
404
原创 网络编程之 UDP(聊天室)
1 介绍2 Java 实现 UDP 消息发送2.1 客户端public class UDPClientTest { public static void main(String[] args) { DatagramSocket socket = null; try { // 建立一个 Socket socket = new DatagramSocket(); // 明确目标地址
2021-05-21 22:01:17
236
原创 网络编程之TCP
1 TCP 三次握手四次挥手1.1 三次握手1.2 四次挥手2 Java 实现 TCP 客户端与 TCP 服务端连接2.1 客户端 首先需要明确目标地址信息,然后创建连接,接着通过 IO 发送数据,最后关闭连接。/** * TCP 客户端 */public class TCPClientTest { public static void main(String[] args) { InetAddress serverAddress = null;
2021-05-21 18:27:20
103
原创 多线程(线程通信【生产者与消费者】)
1 生产者消费者 线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题。 假设仓库中只能存放一件产品,生产者出来的产品放入到仓库中,消费者将仓库中的产品拿走。 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,知道仓库中的产品被消费者取走为止。 如果仓库中放有产品,则消费者将产品取走,否则停止消费进入等待。 这种互相通信的过程就是线程协作。2 wait/notify 实现 线程通信中可以通过 wait 和 notif
2021-05-21 01:17:34
218
原创 多线程(Thread 类、Runnable 接口、Callable 接口、synchronized 、Lock、线程池)
1 Thread 先创建 ThreadTest 类并继承 Thread 类,然后重写 run() 方法。public class ThreadTest extends Thread { @Override public void run() { for(int i = 0; i < 5000; i++) { System.out.println("ThreadTest 的 run 方法:" + i); } }}
2021-05-20 23:04:46
274
转载 redis 缓存穿透和雪崩
1 缓存穿透1.1 介绍 key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户 id 获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。1.2 解决方案 一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。布隆过滤器 将所有可能存在的数据
2021-05-19 23:59:02
94
原创 Redis 主从复制
1 介绍 和 Mysql 主从复制的原因一样,Redis 虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制。 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器中。前者称为主节点(master),后者称为从节点(slave)。数据的复制是单向的,只能由主节点到从节点。master 以写为主,slave 以读为主。2 作用数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢复:当主节点出现
2021-05-19 22:24:13
134
原创 Redis发布订阅
1 模型 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 如图所示。首先订阅者先订阅某一频道的消息,当发布者要更新消息时会发送到频道队列中,频道队列就会发送消息给订阅者。类似于关注博主一样,当博主更新文章时,就会提醒粉丝消息。2 测试2.1 订阅 首先粉丝先订阅消息,打开一个 redis 的客户端作为粉丝的终端,输入 SUBSCRIBE 订阅一个 pkyShare 的订阅号。127.0.0.1:6379>
2021-05-19 17:13:15
102
原创 redis 持久化(RDB、AOF)
1 介绍 redis 是基于内存存储的数据库,为避免断电或服务器宕机重启导致数据丢失,因此需要持久化。 持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘中,也就是 snapshot 快照,发生宕机重启后,直接将快照文件读入内存即可。 redis 的持久化有两种,rdb 与 aof。3 RDB redis 的默认持久化方式。3.1 持久化过程 redis 会单独创建一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束后,再用这个临时文件替换上次的吃句话好的
2021-05-19 01:00:39
127
原创 redis 配置文件( IP、端口、密码等信息)
1 单位# Note on units: when memory size is needed, it is possible to specify# it in the usual form of 1k 5GB 4M and so forth:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes#
2021-05-18 22:24:45
1321
原创 SpringBoot 整合redis
1 说明 在 SpringBoot 2.x 之后,原来使用 Jedis 连接 redis 被替换成了 lettuce。两者的差别如下Jedis 使用同步和阻塞 IO 的方式,不支持异步;lettuce支持异步,底层是基于netty框架的事件驱动作为通信层。Jedis 设计上就是基于线程不安全来设计,一个连接只能被一个线程使用,但是可以结合连接池来提高其性能;lettuce 和 Redis 基于线程安全来设计的,一个连接是被共享使用的,但是也提供了连接池,主要用于事务以及阻塞操作的命令。2
2021-05-18 01:35:36
139
原创 排查通过服务器中 redis 的漏洞植入 pnscan 病毒进行挖矿
1 描述 最近买了一台云服务器进行学习研究,然后装了 redis,怎想到了某天晚上 22:00 开始服务器就卡顿了,输入命令半天没响应,然后重新连接则多次超时。最后连接上去了,输入命令 uptime ,显示如下图: 我的服务器是 1 核心的,信息显示有另一个用户,而且后面三个参数都超过了 1,表示当前 CPU 严重过载。 再在云服务器管理页面查看可视化界面,如下图: 没遇到过这种情况,然后就提交了工单叫云服务器人员帮忙处理。2 结果与分析 结果是攻击者通过 redis 的安全漏洞植入
2021-05-17 23:35:13
944
原创 Jedis(结合 redis 事务、乐观锁)
1 介绍 Jedis 是 Redis 官方推荐的 Java 连接开发工具。2 Maven <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version><!--版本号可根据实际情况填写--
2021-05-16 22:10:33
227
1
原创 redis 乐观锁
1 介绍 当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。 一般通过乐观锁与悲观锁实现并发控制。1.1 乐观锁 乐观锁是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则返回给用户错误的信息,让用户决定如何去做。
2021-05-16 17:16:25
233
原创 Redis 事务
1 介绍 Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:批量操作在发送 EXEC 命令前被放入队列缓存。收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段:开始事务。命令入队。执行事务。2 命令开启事务并执行127.0.0.1:6379> MULTI # 开启事务OK127.0.0.1:63
2021-05-16 16:33:40
517
2
原创 redis 特殊数据类型 bitmap
bitmap 就是通过最小的单位 bit 来进行 0 或者 1 的设置,表示某个元素对应的值或者状态。一般用于签到、登陆、活跃等状态。8 bit = 1 byte = 0.001 kb,因此极大的节省存储空间。1 基本命令插入(以一个星期的活跃来设置)127.0.0.1:6379> SETBIT active 1 1 # 设置周一的值(integer) 0127.0.0.1:6379> SETBIT active 2 0 # 设置周二的值(integer) 0127.
2021-05-16 01:15:17
134
原创 redis 特殊数据类型 HyperLogLog
Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 264 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。 但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样
2021-05-16 00:46:58
110
原创 redis 特殊数据类型 geospatial(地理位置)
1 基本命令插入 将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中,该命令以采用标准格式的参数 x, y,所以经度必须在纬度之前。非常靠近极点的位置是不能被索引的。 有效的经度:-180 度到 180 度 有效的纬度:-85.05112878 度到 85.05112878 度超出范围则报错。127.0.0.1:6379> GEOADD guangdong-city 113.27324 23.15792 guangzhou # 插入广州坐标(integer)
2021-05-15 22:58:19
257
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人