- 博客(224)
- 资源 (11)
- 收藏
- 关注
原创 Spring Boot 从 HTTP 升级 HTTPS:我踩了 3 个大坑,终于解决了!
摘要:本文记录了Spring Boot项目从HTTP升级HTTPS过程中遇到的典型问题及解决方案。主要问题包括:1)SSL证书生成与JDK版本兼容性问题;2)Maven资源过滤导致PKCS12证书损坏;3)开发环境与生产环境配置差异。通过统一JDK版本、禁用Maven对二进制文件的过滤,最终成功实现HTTPS部署。文章提供了详细的配置示例和排查步骤,特别强调了PKCS12证书的生成注意事项和Maven资源过滤的潜在影响。 关键词:Spring Boot、HTTPS、PKCS12、Maven资源过滤、JDK兼
2026-05-23 13:53:26
350
原创 Cursor 用 Java + Vue3 做了一个可落地的酒店管理系统(HMS),支持多门店、RBAC、财务结算,源码开源!
Cursor用 Java + Vue3 做了一个可落地的酒店管理系统(HMS),支持多门店、RBAC、财务结算,源码开源!
2026-04-25 22:28:16
500
原创 MySQL 只读库踩坑实录:为什么 INSERT/UPDATE 不报错,DELETE 却直接炸了?
摘要:在一次线上问题排查中,遇到了一个非常反直觉的现象:MySQL 处于只读模式时,INSERT / UPDATE 操作不报错却没有任何数据写入,而 DELETE 操作却直接抛异常。本文结合 Hibernate / JPA 的延迟执行机制与 Spring 事务原理,深入分析该现象产生的根本原因,并给出快速定位与验证方法。如果你正在使用 Spring Boot + JPA + MySQL 主从复制 / 读写分离架构,这将是一个几乎必踩、但又极易被忽略的经典坑。
2026-02-10 15:11:13
667
原创 一次启动即炸的 NPE:我被 @PostConstruct 狠狠教育了一次
本文分析了Spring Boot项目中一个由@PostConstruct使用不当引发的空指针问题。问题出现在Bean初始化阶段,开发者误以为@PostConstruct执行时Spring容器已完全就绪,实际上此时AOP代理、事务环境等尚未完全生效。文章指出这是一个确定性设计缺陷,并给出了两种解决方案:推荐使用ApplicationReadyEvent确保容器完全就绪,或使用异步延迟执行作为应急方案。最后强调@PostConstruct仅适用于参数校验和内部状态初始化等简单操作,不适合执行依赖外部资源的业务逻
2026-01-19 11:08:07
587
原创 大学生就业招聘系统Springboot+Vue
大学生就业招聘系统程序设计文档 该项目基于Spring Boot+Vue前后端分离架构,实现了一个大学生在线就业招聘平台。系统包含求职者、企业和管理员三种角色,提供用户认证、岗位管理、企业中心、个人中心、后台管理等功能模块。采用Java+JavaScript开发,MySQL存储数据,MyBatis进行数据访问。文档详细介绍了项目背景、需求分析、系统设计、数据表结构等技术方案,为系统开发提供完整指导。该平台旨在优化大学生求职流程,提升招聘效率,实现求职者与企业的精准匹配。
2025-11-02 17:02:34
932
原创 springboot——@Scheduled为什么顺序执行
摘要: Spring中@Scheduled定时任务默认单线程执行,导致长任务阻塞后续任务(如4点任务未完成时5点任务延迟)。解决方案是通过配置ThreadPoolTaskScheduler启用多线程,使任务并发执行。需注意线程安全、资源管理及错误处理。代码示例展示了配置线程池后任务并行效果,未配置时任务串行执行。源码分析指出默认线程池为单线程,需手动扩展以实现并发。
2025-10-24 17:26:06
466
原创 高效地传递事件——Disruptor——简单使用
disruptor.getRingBuffer() 方法通常是在你已经配置并创建了一个 Disruptor 实例后调用的,用于获取与该 Disruptor 实例关联的 RingBuffer。Disruptor 是一个高性能的环形缓冲区(Ring Buffer)库,它用于在多个生产者(Producers)和消费者(Consumers)之间高效地传递事件(Events)。RingBuffer 的大小是固定的,当达到缓冲区的末尾时,写入操作会回绕到缓冲区的开始位置。以上是文心一言生成的,自己写个小demo。
2024-10-25 16:17:07
956
原创 Java读取损坏的xls表格
方案二进一步解读:三步骤看似简单想通过简单的命令实现并不简单,Java中提供了Runtime.getRuntime().exec(“命令”),执行外部命令或程序,打开,保存,关闭,3个命令放在一起执行没有达到想要的结果,分开三次执行exec命令也没达到效果。Java 代码无论是使用EasyExcel,还是POI底层原理都是先把文件转为流。一些看似不太聪明的方案成功解决了问题!
2024-09-16 23:53:06
827
原创 Spring为什么要用三级缓存解决循环依赖?
在Java Spring的厨房里,循环依赖这道菜可是让不少程序员大厨头疼的“黑暗料理”。但Spring大厨微微一笑,不慌不忙地亮出了他的秘密武器——三级缓存“时光机”!一级缓存,那是“秒出”区,新鲜出炉的Bean直接上桌,快得就像外卖小哥的闪电送。二级缓存,咱们叫它“半成品天堂”,Bean们在这里稍作休息,等待最后的调味。但别急,好戏还在后头!重头戏来了,三级缓存——“未来豆预测局”!
2024-09-16 23:47:22
1423
原创 RPC框架之OpenFeign快速上手
写个小demo练练手,这里只是用到rpc简单的调用,服务注册都没用,直接就是消费者通过url调用服务生产者。
2023-10-15 16:33:10
718
原创 日志框架——Log4j2
Apache Log4j2是一个开源的日志记录组件,使用非常的广泛。在工程中以易用方便代替了System.out 等打印语句,它是JAVA下最流行的日志输入工具。
2023-06-04 19:09:41
1351
原创 MySQL主从数据库(主读从写)
Component @Primary //将该Bean设置为主要注入Bean implements DataSource, InitializingBean public class DynamicDataSource extends AbstractRoutingDataSource {//当前使用的数据源标识 public static ThreadLocal < String > name = new ThreadLocal < >();
2022-11-20 12:50:41
1985
1
原创 MySQL数据库5.7字符集的设置——MySQL8.0加密问题解决
这个乱码只有安装数据库是5.7的才会有这种情况,数据库是8.0的默认都是utf-8的,不需要修改就可以直接使用的。在创建表或者创建库的时候,如果没有指定编码,默认是。(CHARSET=latin1)的。
2022-10-26 17:36:16
3374
1
原创 Linux实操指令
: 表示文件d: 目 录c: 字符设备文件,一次传输一个字节的设备被称为字符设备。例如键盘,鼠标linux 权限机制采用 UGO 模式。其中u(user)表示所属用户、g(group)表示所属组、o(other)r–read 读权限w–write 写权限x–execute 执行权限。
2022-10-23 22:52:34
2954
原创 Docker上下载安装Nginx——解决多端口访问问题
是将宿主机/root/project与容器/var/www/html关联,以后所有的项目都建立在/root/project下,因为关联在/var/www/html,所以容器可以访问到外部的项目,方便在nginx.conf反向代理到项目(一般如果是前端项目就可代理到:/var/www/html/项目名/index.html)是/root/nginx_conf 放置所有的配置文件,可以在nginx容器根目录下的/etc/nginx共享(容器的配置文件就在/etc/nginx目录下边)在宿主机上修改配置文件。
2022-10-22 18:24:53
6557
1
原创 Docker部署SpringBoot项目——创建镜像——创建容器并启动——查看容器日志——删除容器日志
查看日志的时候会打印出所有的日志,我们不想查看之前的日志,这里提供删除所有日志的命令,就是把本地日志文件给删除。docker run -id -p 主机端口号:容器端口号 --name=容器名字 镜像(app)软件直接拉进去,就可以完成Windows上的文件上传到远程服务器上。可以实时观看容器的日志,不加的查看的是历史记录一下子输出到控制台。最简的方法就是去掉所有注释,亲测有效,可以用下边的配置。后边可能还会用到关闭容器,启动容器,这里提供一下命令。通过命令查看,已经上传成功了。
2022-10-15 23:35:15
3494
2
原创 SpringBoot集成mongodb——MongoTemplate 与 MongoRepository 两种方式CRUD
spring-data-mongodb,提供了MongoTemplate 与 MongoRepository 两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb ,MongoRepository的缺点是不够灵活,MongoTemplate,正好可以弥补不足。模糊查询这里需要注意,如果实体中包含多个实体,那么我们在对某个字段做模糊查询的时候,要设置其他字段。创建一个接口继承另一个接口。
2022-10-07 21:29:32
2690
原创 MongoDB 增删改查命令
在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1为升序排列,而-1是用于降序排列。在MongoD中使用limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据。可直接用类似T-SQL条件表达式更新,或用Save()更新从数据库返回到文档对象。修改数据库中姓名为zhangsan的age和sex字段的值。向集合Collection中添加数据User属性。条件查询:查询年龄等于19岁,显示姓名和年龄。
2022-10-07 10:03:19
2306
原创 MongoDB——概念解析——Docker上下载安装——mongoDB基本命令
MongoDB官方文档NoSQL(NoSQL= Not Only sQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。
2022-10-06 19:10:30
2470
原创 SpringCache+Redis缓存数据——相关依赖,配置类,核心配置,注解
自Spring 3.1起,提供了类似于@Transactional注解事务的注解Cache支持,且提供了Cache抽象,方便切换各种底层Cache (如: redis )根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。2,通过注解Cache 可以实现类似于事务一样,缓存逻辑透明的应用到我们的业务代码上,且只需要更少的代码就可以完成;4,支持比较复杂的缓存逻辑;
2022-10-05 22:13:45
2628
原创 logback日志输出优化
Logback和log4非常相似,如果你对 @log4很熟悉,那对 logback很快就会得心应手。spring boot内部使用Logback 作为日志实现的框架。日志输出文件的地址修改。
2022-10-02 10:47:04
2674
原创 leetcode——字符串转换整数 (atoi)——百日算法成就第8天8%
具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1。将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。第 2 步:“4193 with words”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)字符串的其余部分将被忽略。由于 “-42” 在范围 [-231, 231 - 1] 内,最终结果为 -42。第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
2022-09-30 15:41:07
1925
原创 leetcode——整数反转——百日算法成就第7天7%
这个题目的易踩坑的地方可能就是int整形越界问题,如何判断整形越界呢,方法一:可以用整形的边界值来判断;方法二:解决代表着损失精度,要想越界那么这个整数的长度最少也要10位,那就判断乘以10后的结果再除以10与原来的数大小是否相同就可以了,如果不越界必定相同。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。输入:x = -123。输入:x = 123。输入:x = 120。
2022-09-29 23:45:44
2165
原创 Docker安装Redis——下载Redis镜像——创建配置文件——创建容器实例并启动——创建并启动MySQL数据库——修改时区
当服务器和容器都不存在 redis.conf 文件时, 执行启动命令的时候 docker 会将 redis.conf 作为。可以去官方下载配置文件,但是好像没有必要,因为我已经下载过了,可以直接去下边CV。redis的data文件位置 : /home/redis/data。4.将下边内容放进配置文件redis.conf中。1.创建配置文件的目录(-p创建多级目录)下载后解压拿到配置文件redis.conf。2.创建配置文件redis.conf。创建,而我们需要的是一个。退出redis客户端。
2022-09-29 21:26:42
4925
6
原创 Docker常用命令_帮助启动类命令_镜像命令_容器命令
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程容器运行的命令,如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作,别中断,o(n_n)O哈哈~是在容器中打开新的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
2022-09-27 21:04:49
2766
原创 leetcode——Z 字形变换——百日算法成就第六天6%
从上到下一行放一个,到最后一行然后再从下往上一行放一个,到第一行后再从上到下一行放一个…这里我们需要创建一个数组或者集合来存储每一行的元素,那我们咱们确定一个元素该放在 第几行呢,这里直接按个放就行了,只需要控制一个方向,在碰到上边界的时候让他往下走,碰到下边界的时候让他往上走,OK,让我们一起打羽毛球吧,嘿嘿,需要一个东西来控制羽毛球的路线,那就到我这边我用球拍给他来一下,到你那边你再用球拍来一下。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
2022-09-26 22:32:01
2108
原创 Docker——阿里云镜像加速
镜像加速器,简而言之就是本地没有某个镜像的时候,需要去远程仓库下载,下载速度可能很慢造成超时,这里通过配置提升下载的速度。上篇笔记记录了CentOS7 上 Docker的下载、安装、启动、关闭、卸载;登录阿里云开发平台,点击【控制台】,选择【容器镜像服务】,获取【加速器地址】下边是一次创建多级目录,因为目录/etc/docker已经存在了,可以不执行。在/etc/docker目录下的daemon.json 中添加内容。:使用加速器可以提升获取Docker官方镜像的速度。重启docker服务。
2022-09-26 21:24:59
6278
原创 leetcode——最长回文子串——百日算法成就第五天5%
给出一个字符串,我们可以把他转为字符数组,用双重循坏外层表示回文子串的起始下标,内层循环表示回文子串的终止下标,进行判断该区间内的子串是否是回文子串。这种方法提交在LeetCode上会提示。链接:https://leetcode.cn/problems/longest-palindromic-substring。给你一个字符串 s,找到 s 中最长的回文子串。解释:“aba” 同样是符合题意的答案。来源:力扣(LeetCode)输入:s = “babad”输入:s = “cbbd”
2022-09-26 00:20:40
2186
原创 Docker简介——理念——虚拟机容器——Docker组成的三大要素——工作原理——运行流程
Docker是基于Go语言实现的云开源项目Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。Linux容器技术的出现就解决了这样一个问题,而Docker就是在它的基础上发展过来的。将应用打成镜像。
2022-09-25 14:12:44
2445
原创 CentOS7 下载安装卸载 Docker——Docker启动关闭
(CE):为了开发人员或小团队创建基于容器的应用,与团队成员分享和自动化的开发管道。docker-ce提供了简单的安装和快速的安装,以便可以立即开始开发。docker-ce集成和优化,基础设施。uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。主机上的映像、容器、卷或自定义配置文件不会自动删除。需要总下载量:114 M,打开2分钟,中间输入2次y。安装软件包(提供实用程序)并设置存储库。查看安装docker的版本号。关闭docker服务。
2022-09-25 12:21:47
4454
原创 leetcode——寻找两个正序数组的中位数——百日算法成就第四天4%
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数。链接:https://leetcode.cn/problems/median-of-two-sorted-arrays。解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。输入:nums1 = [1,2], nums2 = [3,4]输入:nums1 = [1,3], nums2 = [2]解释:合并数组 = [1,2,3] ,中位数 2。
2022-09-25 00:34:22
2247
原创 leetcode——无重复字符的最长子串——百日算法成就第三天3%
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”输入: s = “pwwkew”
2022-09-23 21:47:17
2116
原创 插入排序原理(C语言)—— C语言求数组的长度——sizeof()
从下标为1的元素开始,取出下标为i元素放在temp,逐个与前面的元素比较,如果前边的元素比当前元素大,那么就把前边的元素覆盖后边的元素,直到前边的元素≤当前元素,就把temp放在当前位置。这种方法只能适用于静态赋值的数组(静态数组中长度等于真实的元素个数),其原理是计算数组声明的时候所占用的空间除以数组类型单个元素占用的空间。无论从数组中存放在几个元素,用上述方法求出的数组长度都是100;计算数组长度时必须在声明数组所在的方法内求,然后把长度当做参数传递给别的方法。操作数所占空间的字节数大小。
2022-09-23 18:33:40
2659
原创 leetcode——两数相加——百日算法成就第二天2%
这个题目有点像我们小学学习的加法运算,先算低位需要注意的是有的需要进位,为了加深对链表的认知,爱学习的我怎么会放弃键盘,敲!
2022-09-22 23:59:46
2240
1
原创 leetcode——两数之和——百日算法成就第一天1%
这个方法真好使,用空间换时间,这里数据比较少体现不出来时间的优势,后序真实的工作中有些需求是可以用到的,比如我们后序会学到缓存redis什么的,可以把访问频率比较高的存储在redis中,redis底层是存储在内存的,这样会减少对数据库的访问,减少IO的次数可以大大提高访问的速度,并且减少对数据库的访问压力。
2022-09-21 22:17:55
2939
1
原创 表单提交RESTful风格——GET,POST,DELETE,PUT 4种方式处理源码
RESTful手动关闭配置(默认就是关闭的,这里可以直接删除这条配置),这里的开启和关闭只会影响表单的提交DELETE和PUT请求,这两种请求是放在POST请求表单中的隐藏方法中,开启配置的时候请求拦截POST请求,读取隐藏的方法,把隐藏的方法替代POST请求,进而达到“偷梁换柱”的目的;开启配置后,表单提交POST中含隐藏方法的会被拦截,拦截后读取POST提交表单中隐藏方法_method的值,不开启配置会直接按照POST请求处理。首页:http://localhost:8080/
2022-09-19 16:45:44
4584
1
基于 Spring Boot + Vue 3 开发的汽车租赁管理系统,支持用户租车、管理员管理等完整功能
2025-11-02
大学生就业招聘系统Springboot+Vue https://blog.csdn.net/qq-45896330/article/details/154292387
2025-11-02
MAT(外文名:Memory Analyzer Tool,缩写MAT)是一款由Eclipse基金会托管的开源Java堆内存分析工具,主要用于检测内存泄漏及优化内存使用效率
2025-09-17
java基础-拼图小游戏.zip
2022-01-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅