- 博客(117)
- 收藏
- 关注
原创 Docker安装RabbitMQ
本文介绍了使用Docker快速部署RabbitMQ的步骤。首先创建docker-compose.yml文件配置RabbitMQ服务,包含数据卷挂载和端口映射(15672和5672)。执行docker-compose up -d启动服务后,可通过curl测试连接。默认情况下图形管理界面未启用,需进入容器手动启用相关插件,访问15672端口即可使用默认账号guest/guest登录管理界面。该方法简化了RabbitMQ的安装配置过程,适合快速搭建开发测试环境。
2025-08-14 17:11:50
264
原创 Linux系统安装Docker及常见问题解决
《CentOS 7下安装Docker及配置镜像源指南》 针对CentOS 7系统因官方源失效导致的Docker安装问题,本文提供解决方案:首先替换yum源为阿里云镜像(下载Centos-7.repo至/etc/yum.repos.d/),执行yum clean all和yum makecache更新源。随后安装依赖组件并配置阿里云Docker源,通过yum install docker-ce完成安装,设置开机自启。针对镜像拉取失败问题,在/etc/docker/daemon.json中配置国内镜像站(如Da
2025-08-14 16:47:09
494
原创 SpringAI介绍
摘要: SpringAI是面向Java/Spring生态的原生生成式AI框架,基于Spring设计理念重构AI开发全流程。其主要特点包括:支持多供应商模型(如OpenAI、Deepseek等),提供统一抽象API实现无缝切换;深度集成SpringBoot,通过Starter简化配置;支持向量数据库集成与RAG检索增强;具备类型安全响应处理和函数调用能力。通过一个Deepseek对话案例,展示了如何快速搭建SpringAI项目,包括依赖配置、API密钥设置、控制器开发及前端交互实现,最终实现浏览器可视化AI聊
2025-08-01 17:17:19
1031
原创 Gateway
本文介绍了Spring Cloud Gateway(SCG)作为微服务架构中核心网关组件的关键特性和应用场景。SCG作为后端服务统一入口,具备路由转发、鉴权、限流等核心功能,相比传统Zuul采用基于Netty的异步非阻塞模型(WebFlux),显著提升了并发处理能力。文章详细解析了SCG的核心概念:路由(Route)由ID、目标URI、谓词和过滤器组成;谓词(Predicate)支持基于请求头、参数等条件的匹配;过滤器(Filter)可在请求前后修改报文内容。通过具体示例展示了路由配置的两种方式(YAML/
2025-07-22 17:39:57
1092
原创 Spring Security 实践及源码学习
Spring Security就是一个安全框架,帮助咱们实现认证(登录-Authen)和授权(角色,权限/菜单,Author)操作。除了SpringSecurity,还有一个Java中常见的安全框架,Apache Shiro。Spring Security是一个相对比较复杂的安全框架,学习的他方式,要先理解底层流程,然后才能实现自定义认证等操作。1、提供Controller接口,完成基本流程的功能@Autowired//1、参数校验。
2025-07-15 16:32:26
855
1
原创 MD5工具类
MD5Util是一个Java实现的MD5加密工具类,提供两种加密方法:基础MD5加密(md5)和带盐值的MD5加密(md5WithSalt)。该类使用MessageDigest实现加密功能,支持UTF8编码处理,将加密结果转换为16进制字符串输出。示例代码展示了如何使用该工具类进行字符串加密,并包含注释说明的测试方法
2025-06-13 15:38:37
142
原创 密码脱敏(加密存储)
Spring Security通过PasswordEncoder接口实现密码加密存储,确保安全性。主流实现包括:BCryptPasswordEncoder(推荐,自带盐值)、NoOpPasswordEncoder(仅测试用)、Pbkdf2PasswordEncoder等。使用时通过encode()方法加密存储,matches()方法验证密码。示例展示了BCryptPasswordEncoder的配置和使用,其特点是每次加密结果不同但能正确验证。该机制有效防止数据库泄露导致明文密码暴露,是系统安全的必要措施。
2025-06-12 11:48:46
455
原创 关于使用WebSocket时无法使用@Autowired 注入的问题
在Spring中使用@ServerEndpoint时,尽管标记@Component,WebSocket实例仍由容器直接创建,导致@Autowired失效。根本原因是WebSocket实例未被Spring管理。解决方案是通过ApplicationContextAware工具类手动获取Bean。示例:创建SpringContextUtils提供静态方法,在WebSocket回调中调用SpringContextUtils.getBean()注入所需服务,避免NPE。
2025-06-11 17:37:15
649
原创 JDBC(四) 三层架构、DAOUtils、Druid连接池、DBUtils
本文详细介绍了Java数据库开发中的三层架构设计与工具封装技术。主要内容包括:1) 三层架构(DAO、Service、Web层)的分工与包结构设计;2) DAOUtils工具类对JDBC操作的二次封装,通过泛型和RowMapper接口实现通用查询;3) 使用Druid连接池优化数据库连接管理;4) Apache DBUtils工具的应用,包括QueryRunner的增删改查操作及结果集处理(BeanHandler/BeanListHandler)。这些技术方案有效减少了JDBC冗余代码,提高了开发效率和系统
2025-06-09 15:59:55
1042
原创 JDBC(三) 时间类型处理、Service层、事务
本文主要介绍MySQL时间类型处理与JDBC事务管理。在时间类型处理方面,详细对比了MySQL的date、datetime、timestamp三种类型与Java中java.util.Date、LocalDateTime等类型的转换方式,并提供了具体示例。在事务管理方面,重点讲解了转账业务场景下的事务控制实现,包括ThreadLocal解决Connection共享问题、事务封装优化等内容。通过完整示例展示了如何将业务逻辑拆分到Service层和数据访问层,并实现了安全可靠的事务管理机制。最后还介绍了将事务操作
2025-06-09 15:43:11
1646
原创 JDBC(二) 综合案列、SQL注入问题、封装工具类、ORM
本文详细介绍了Java JDBC编程的综合应用,主要内容包括:1)基于用户表的注册登录功能实现;2)SQL注入问题分析与PreparedStatement解决方案;3)数据库工具类封装(连接获取、资源释放、跨平台配置);4)ORM对象关系映射概念与实现;5)DAO数据访问层设计与实现(Person表的CRUD操作)。通过完整案例演示了从基础JDBC操作到分层架构的实现过程,重点解决了SQL注入、代码复用、数据库配置解耦等问题,为开发数据库应用程序提供了规范化的实现方案。
2025-06-06 16:01:53
1342
原创 JDBC(一) 介绍、开发步骤、ResultSet结果集
本文介绍了使用Java通过JDBC连接MySQL数据库的开发流程。JDBC是Java提供的数据库交互规范,需要数据库厂商提供对应驱动。开发步骤包括:注册驱动(Class.forName)、建立连接(DriverManager.getConnection)、获取Statement对象、执行SQL(executeUpdate/executeQuery)、处理结果(ResultSet)和释放资源。针对查询操作重点说明了ResultSet的使用方法,通过next()遍历结果集并使用getXxx()获取数据。文中提供
2025-06-06 15:46:27
696
原创 MySQL基础(五)事务、DCL权限控制、视图、同义词、索引及练习
本文主要介绍了MySQL中的事务、权限控制、视图、同义词、索引等核心概念及应用。在事务部分,详细讲解了转账操作的实现原理、事务特性(ACID)、并发问题及隔离级别设置。权限控制部分包含用户创建、授权和撤销操作。视图部分阐述了虚拟表的概念与使用方法。索引部分分析了如何合理添加索引以提升查询效率。最后通过14个综合查询案例,包括部门最高薪资查询、员工薪资比较、多表关联查询等实战练习,帮助掌握复杂SQL编写技巧。常见错误提示也为实际应用提供了参考。全文系统性地梳理了MySQL数据库的核心操作与优化方法
2025-06-06 15:34:20
901
原创 MySQL基础(四)DML、数据表操作DDL操作
主要介绍了MySQL数据库的DML(数据操作语言)和DDL(数据定义语言)操作。DML部分重点讲解了insert新增数据、update修改数据和delete删除数据的语法及注意事项,强调where条件的重要性。DDL部分详细说明了MySQL数据类型(数值、时间、字符串)、表的创建与修改操作(增删改列、改表名、清空表等),并介绍了主键约束、唯一约束、非空约束等完整性约束的使用方法。文章通过具体SQL示例演示了各类操作的实际应用,并提醒注意常见问题和错误
2025-06-06 15:29:57
816
原创 MySQL基础(三)DQL(Data Query Language,数据查询语言)
本文详细介绍了MySQL数据库查询语言(DQL)的核心操作,涵盖基础查询、条件查询、分组查询、排序查询等关键内容。主要内容包括:1. 基础查询操作:部分列查询、全列查询、列运算、别名设置及结果去重;2. 条件查询:等值/不等值判断、逻辑运算、区间查询、NULL值处理、模糊查询等9种查询方式;3. 高级查询技巧:时间/字符串函数、聚合函数、分组查询与过滤、结果限定等;4. 复杂查询方法:子查询的多种应用场景、表连接查询(内连接与外连接);5. 常见错误处理。通过系统讲解各类查询语法和实际案例,帮助读者全面掌握
2025-06-06 15:25:38
1235
原创 MySQL基础(二)SQL语言、客户端工具
指定上各种连接信息后,会发现Navicat无法正常连接,原因是因为MySQL升级到8.0版本之后,采用的加密方式是caching_sha2_password,这种加密导致8.0的版本用远程工具无法正常的链接,需要将现在用的root用户的密码加密方式,修改为mysql_native_password的方式。对于数据库的操作,需要进入的MySQL环境下进行指令输入,属于完一个语句,需要使用;# 查看当前使用的是哪个数据库。开始操作,首先用doc窗口,或者用MySQL提供的命令窗口去进入到MySQL环境。
2025-06-06 15:19:50
1066
原创 MySQL基础(一)介绍、下载及安装
本文介绍了Java数据存储的两种方式:内存存储(瞬时状态)和IO持久化(存在安全性与维护问题),引出数据库解决方案。重点讲解了关系型与非关系型数据库的分类,并详细说明MySQL作为主流关系型数据库的特点及其5.7和8.0版本的安装步骤。安装过程包括官网下载、默认路径配置、环境变量设置及连接测试,强调版本共存时的注意事项。全文旨在为读者提供MySQL基础认知与实践指导
2025-06-06 15:16:06
891
原创 JDK8 stream API用法汇总
注意:Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象!Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工 处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品。Stream API能让我们快速完成许多复杂的操作,如筛选、切片、映射、查找、去除重复,统计,匹配和归约。
2025-02-10 17:47:08
1390
原创 JDK8 日期时间API汇总
JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包 中,下面是一些关键类。LocalDate :表示日期,包含年月日,格式为 2019-10-16LocalTime :表示时间,包含时分秒,格式为 16:38:54.158549300LocalDateTime :表示日期时间,包含年月日,时分秒,格式为 2018-09-06T15:33:56.750DateTimeFormatter :日期时间格式化类。
2025-02-10 17:03:19
659
原创 【Nginx】解决安装Nginx中遇到得基础环境问题
遇到 yum install gcc-c++ 无法正常安装因为 yum 依赖的 Python 模块 urlgrabber 缺失或损坏。这通常发生在系统中的 Python 环境不完整或被破坏时。
2024-11-27 16:12:39
426
原创 【JAVA基础】关于Java中的时间类
可变类:提供灵活性和性能优势,但可能在多线程环境中导致不安全问题。不可变类:在多线程环境中是安全的,但可能在某些场景下牺牲了一定的灵活性和性能。解决方案:使用java.time包中的不可变类或使用来确保线程安全。
2024-11-15 15:41:26
451
原创 【Spring】关于Spring中aware相关接口的作用
完成了属性赋值之后,Spring会执行一些回调,包括: 1. BeanNameAware:回传beanName给bean对象。接口的回调方法是在 Bean 实例化之后调用的。具体来说,这些回调方法是在依赖注入完成后,但在 Bean 完全初始化之前调用的。通过这种方式,你可以使用纯 Java 配置来实现 BeanNameAware、BeanClassLoaderAware 和 BeanFactoryAware 回调。最后,编写一个主类来启动 Spring 应用,并获取 MyBean 实例。
2024-10-18 13:53:16
1252
2
原创 【Spring】Spring和SpringMVC为什么需要父子容器
Spring和Spring MVC使用父子容器的设计模式,主要是为了实现更好的模块化和隔离,提高系统的灵活性和可维护性。具体来说,Spring应用通常包含两个层次的容器:根容器(Root WebApplicationContext)和子容器(Child WebApplicationContext)。
2024-10-12 17:35:15
1148
原创 【Spring】@Autowired注解自动装配的过程
如果 @Autowired 注解上有 @Qualifier 注解,Spring会根据 @Qualifier 指定的名称来查找Bean。:如果 @Autowired 注解没有 @Qualifier 注解,Spring会尝试使用字段名或参数名作为Bean的名称来查找。如果容器中有多个匹配的Bean,可以使用 @Qualifier 注解来指定具体的Bean。:Spring会查找与 @Autowired 注解指定的类型相匹配的Bean。如果依赖是可选的,可以使用 required=false 属性。
2024-10-11 18:03:08
1570
原创 【Spring】Bean的生命周期
BeanPostProcessor 的 postProcessBeforeInitialization 方法:调用所有注册的 BeanPostProcessor 的 postProcessBeforeInitialization 方法。BeanPostProcessor 的 postProcessAfterInitialization 方法:调用所有注册的 BeanPostProcessor 的 postProcessAfterInitialization 方法。
2024-10-11 11:03:10
953
原创 基于Nginx搭建点播直播服务器
如果⼀切正常,那么就会在/usr/local/nginx目录下搭建起nginx服务,使用nginx -v,能看到版本输出,就表示,nginx服务安装成功了。这通常是因为 /usr/local/nginx/sbin 目录没有被添加到系统的 PATH 环境变量中。将 /usr/local/nginx/sbin 添加到系统的 PATH 环境变量中。当然,NGINX本身是不⽀持视频的,需要为NGINX增加相应的RTMP模块进行支持。实现直播和点播离不开服务器⽀持,可以使用开源的NGINX服务器搭建直播和点播服务。
2024-09-23 10:57:22
1151
原创 【Docker】Docker上安装MySql8和Redis
对于镜像中需要持久化保存的⽂件,需要通过-v挂载到宿主机上,这样这些⽂件才不会随着容器关闭⽽消失。对于MySQL,需要将他的⽇志⽂件、数据⽂件和配置⽂件挂载到宿主机上。同样,需要注意将Redis的配置⽂件和⽇志⽂件挂载到宿主机上。
2024-09-20 16:33:23
809
原创 【JVM】符号引用 和 直接引用
简单来说,解析阶段就是将类文件中的符号引用(比如方法名、字段名等)转换成可以直接访问的内存地址或其他形式的直接引用的过程。这个过程确保了虚拟机在执行字节码时能够准确地找到需要调用的方法或访问的字段。
2024-09-13 16:33:30
1218
原创 【Java基础】关于序列化和反序列化
就像你寄给朋友的礼物,无论朋友在哪里,无论他们用什么工具打开包裹,里面的东西都应该是一样的。所以,序列化就像是打包礼物的过程,让数据能够在不同的地方和不同的系统之间被理解和使用。而反序列化就是拆礼物的过程,把收到的简单格式的数据还原成原来复杂的对象。:当你把一个复杂的对象序列化后,它就变成了一个简单的字符串或字节数组,这使得你可以很容易地处理和传输这些数据,而不用担心原始对象的复杂性。:如果你想要保存一个程序的状态或者某个时刻的数据,你需要把它们变成文件保存起来,这就需要用到序列化。
2024-09-12 10:29:19
336
原创 【JAVA】解析Json字符串常见方式
首先,我们定义一个简单的 Java 类来表示 JSON 数据的结构。假设我们有以下OrderDto类@Override'}';
2024-08-28 10:29:52
1072
原创 生成当天的开始时间和结束时间
获取当前日期:计算今天的日期:获取一天的最小时间:构造当天开始时刻的 LocalDateTime 对象:格式化 LocalDateTime 为字符串:如果当前日期是 2023 年 8 月 27 日,该方法将返回 。
2024-08-27 17:45:44
576
原创 【Docker】Docker上安装rocketMQ
刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;SYNC_FLUSH消息写入磁盘后 才返回成功状态,ASYNC_FLUSH不需要;#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;#broker名称,master和slave使用相同的名称,表明他们的主从关系。# 设置broker节点所在服务器的ip地址 换成自己的主机ip。#0表示Master,大于0表示不同的。#在磁盘上保留消息的时长,单位是小时。拉取不到镜像的看前面的帖子。
2024-08-27 15:58:05
614
CentOS镜像:CentOS-7.3-x86-64-Minimal-1611.ISO 包,可用于本地虚拟机测试用
2023-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅