Maven Lifecycle详解
Maven 构建生命周期
Maven
构建生命周期定义了一个项目构建跟发布的过程,包含三种标准生命周期:
clean:清理项目
default(或 build):核心构建流程
site:生成项目文档
img
每个生命周期由多个阶段(phase)组成,执行时按顺序运行,大概流程如下所示
img
Maven 生命周期的本质是
“预定义的阶段序列”,每个阶段对应特定的
“动作”,且阶段之间存在顺序依赖关系(执行后续阶段时,会自动执行所有前置阶段)。
clean 生命周期
clean
生命周期负责清理项目构建时候产生的临时文件和目录(主要是target/),这是它的唯一职责,避免旧文件干扰新构建,确保构建环境
“干净”
clean 生命周期的核心目标:删除项目根目录下的
target/ 文件夹,该文件夹是Maven
默认的构建输出目录,包含编译后的 class 文件、jar/war
包、测试报告等),以及其他临时文件(如 IDE 生成的缓存文件)
clean 生命周期是 Maven...
Spring Security part4—基于数据库的用户认证
基于数据库的用户认证
在前面我们讲了 Spring Security
基于内存的用户认证,但是实际开发中肯定不能做到基于内存隔这就验证,所以说生产开发中,更多使用的还是基于数据库的动态用户认证
Spring Security
基于数据库的用户验证是实际项目中最常用的认证方式,相比基于内存的验证,它能实现用户数据的持久化存储和动态管理。
实际配置理解基于数据库的用户认证
基于数据库的验证与基于内存的验证核心流程一致,都是通过 Spring
Security
的UserDetailsService接口加载用户信息,但数据来源从硬编码的内存数据改为数据库。
我们设计数据库表,通常需要两张核心表(用户表和角色表),采用多对多关系:
12345678910111213141516171819202122232425-- 用户表CREATE TABLE `sys_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(100)...
Spring Security part3—基于内存的用户认证及其源码分析
自定义内存用户验证的配置
用户验证方式
基于内存的用户认证虽然用的比较少,但是这东西简单而且便捷
而 Spring Security 进行用户验证的方式有如下几种,特点也如下
基于内存的验证(In-Memory Authentication)
特点:用户信息直接配置在内存中,无需数据库或其他存储介质
适用场景:快速原型开发、测试环境或简单应用
优势:配置简单,无需额外依赖
局限:用户信息无法动态修改,重启应用后变更会丢失
基于数据库的验证(JDBC Authentication)
特点:通过 JDBC
连接数据库,从数据库表中读取用户信息
适用场景:需要持久化存储用户信息的应用
优势:用户信息可动态管理,支持大量用户
配置:需定义用户表和权限表结构,通过
JdbcUserDetailsManager 实现
基于自定义 UserDetailsService 的验证
特点:通过实现...
Spring Security part2—从入门示例到底层配置的实际分析
Spring Security
示例——实现最简单的身份认证
首先,我们会编写一个只有最基本功能的 Spring Security
程序,只有最基本的最简单的身份验证,之后我们会随着学习不断完善这个项目
Spring Security 接入
引入依赖,我们引入 Spring Security 对应的starter
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>
引入依赖后,如果你直接就开始写,在尝试去访问接下来写的接口就会自动跳转到一个
Spring Security 的默认登陆页面,默认用户名是...
Spring Security part1—了解Spring Security框架
什么是 Spring Security 框架
其实没什么复杂的,顾名思义,Spring Security 框架就是 Spring
生态体系中专注于身份认证(Authentication)
和授权(Authorization)
的安全框架。它的核心功能是保护应用程序免受未授权访问,解决 “谁能访问”
以及 “能访问什么” 的问题。
简单来说,它可以实现,或者常见实现于如下场景:
用户登录验证(用户名密码、第三方登录等);
基于角色 / 权限的访问控制(如 “管理员才能删除数据”);
防护常见安全漏洞(如 CSRF、XSS、会话固定攻击等);
集成多种认证方式(如 OAuth2.0、JWT、LDAP 等)。
但是他不是一个独立的框架,他是 Spring 生态中的一个 组件?
大概可以这么理解,因为它尤其在 Spring Boot 和 Spring Cloud
中才能发挥重要作用。
与 Spring Boot 的关系可以这么理解
Spring Boot 的核心是 “自动配置”,简化框架集成。Spring Security 与
Spring...
Spring Cloud part21—RabbitMQ的进阶特性之消息的可靠性
RabbitMQ 的可靠性
RabbitMQ 的可靠性核心目标是
“确保消息不丢失、不重复消费,最终被正确处理”。其中,避免重复消费是可靠性的关键环节
——
即使因网络波动、系统故障等导致消息被重复投递,业务结果也需保持一致。
避免重复消费就是保证消息就算被重复发送也只被消费一次,这就是我们下面要讲的消息幂等性。
举个例子,我们在购物的时候,已经支付完成,但是消息没有正确的被消费,前端发送请求查询支付状态时,肯定是查询交易服务状态,会发现业务订单未支付,而用户自己知道已经支付成功,这就导致用户体验不一致。
生产者可靠性
生产者重试机制,通过在配置文件中添加相关配置打开重试机制
12345678910spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间 template: retry: enabled: true # 开启超时重试机制 initial-interval: 1000ms # 失败后的初始等待时间 multiplier: 1 # 失败后下次的等待时长倍数,下次等待时长 =...
Spring Cloud part20—RabbitMQ的进阶特性之数据隔离,死信队列和延迟队列
RabbitMQ 数据隔离
数据隔离隔离什么
这个其实在前面就应该说的,只不过我给忘记了
在 RabbitMQ
中,数据隔离是指通过技术手段确保不同业务、团队、环境或租户的消息数据相互独立,避免交叉干扰(如消息误消费、权限越界、资源抢占等)。这在多团队共享
RabbitMQ 集群、多租户系统或复杂业务场景中至关重要。
数据隔离一般会有如下隔离:
业务隔离:不同业务线(如电商的订单、支付、物流)的消息不混用,避免业务逻辑混乱。
环境隔离:开发、测试、生产环境的消息严格分离,防止测试数据污染生产。
权限隔离:限制不同角色对消息资源(交换机、队列等)的操作权限(如只读、读写、配置)。
资源隔离:防止某一业务过度占用集群资源(如连接数、队列长度),影响其他业务。
RabbitMQ
提供了多种机制实现数据隔离,核心是虚拟主机(vhost),配合权限控制、命名规范、资源限制等形成了完整的方案。
虚拟主机,Virtual Hosts,也就是右上角那个 vhost,它是 RabbitMQ
最核心的隔离单位
vhost 是 RabbitMQ...
Spring Cloud part19—RabbitMQ的安装和使用实践
RabbitMQ 的本地部署安装
安装Erlang环境
首先,RabbitMQ 我们前面说过,是用 Erlang 写的
那么我们肯定要安装 Erlang 环境
Windows版下载地址:http://www.erlang.org/download/otp_win64_17.3.exe
打开安装包,第一步这个界面用于自定义 Erlang
安装内容
image-20250731154907733
说一下,其中
Microsoft DLL’s (present):是 Windows
系统依赖的动态链接库(DLL 文件)。如果系统里已有必要的
DLL,安装程序会检测到(显示
“present”),一般保持默认不勾选也没问题(依赖通常已存在或会自动处理
)。
Erlang是 Erlang
运行环境的核心组件,包含虚拟机、基础库等,必须装才能用
Erlang 。
Erlang Documentation是Erlang
的官方文档(手册、指南等),想学习 / 查阅 Erlang
语法、函数用法时很有用,建议勾选(占空间不大,299.3MB...
Spring Cloud part18—RabbitMQ的原理解析和AMQP协议
前言
介绍RabbitMQ
RabbitMQ 是一款基于 AMQP(Advanced Message Queuing
Protocol,高级消息队列协议) 实现的开源消息队列(MQ)中间件,由
Erlang
语言开发,因其高可靠性、灵活的路由机制、丰富的功能特性,被广泛用于分布式系统中的异步通信、服务解耦、流量削峰等场景。
RabbitMQ
最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
消息队列(MQ)的核心作用是 “解耦、异步、削峰”,而
RabbitMQ
作为其中的典型实现,通过规范的消息传递流程、灵活的路由策略和完善的可靠性机制,实现了分布式系统中不同组件
/ 服务之间的 “间接通信”——
即发送方(生产者)无需直接调用接收方(消费者),而是通过 “消息”
作为载体,借助 RabbitMQ
完成传递,从而降低系统耦合度、提升响应速度、缓冲流量峰值。
RabbitMQ 核心概念
RabbitMQ 核心组件和架构
在学习使用 RabbitMQ...
Spring Cloud part17—了解消息队列以及剖析消息队列的工作原理
消息队列相关
什么是消息队列
MQ(Message Queue,消息队列)是一种基于 “存储 - 转发”
模式的通信中间件,核心功能是在...