0%

Spring Boot 热部署详解:从 Tomcat 配置到 Spring Boot 专属方案

热部署(Hot Deployment)是指在应用不停止运行的前提下,自动或手动加载修改后的代码 / 资源,避免频繁重启应用,大幅提升开发效率。传统 Tomcat 热部署需手动配置,而 Spring Boot 提供了更简洁的专属方案(spring-boot-devtoolsspringloaded)。从 “传统 Tomcat 热部署配置→Spring Boot 热部署方案→原理与注意事项” 三个维度,系统讲解热部署的实现方法与最佳实践,帮你高效开发 Spring Boot 应用。

热部署 vs 热加载:概念辨析

在讲解具体方案前,需先明确 “热部署” 与 “热加载” 的区别(避免混淆):

特性 热部署(Hot Deployment) 热加载(Hot Swapping)
核心原理 重新部署整个应用(销毁旧的 ClassLoader,创建新的) 仅替换修改的类 / 资源(不销毁整个 ClassLoader)
适用范围 所有代码 / 资源修改(包括配置文件、依赖) 仅支持类文件修改(不支持配置文件、依赖变更)
性能 耗时较长(需重启应用上下文) 耗时极短(仅加载修改的类)
实现工具 Tomcat 配置、Spring Boot DevTools(部分场景) JRebel、Spring Loaded、JVM HotSwap

本文中 “热部署” 为广义概念,包含上述两种场景,重点讲解 Spring Boot 开发中常用的高效方案。

传统 Tomcat 热部署配置(非 Spring Boot 专属)

若需在外置 Tomcat(非 Spring Boot 内置容器)中实现热部署,需通过配置 Tomcat 关联项目,核心是开启 reloadable="true"(自动检测项目变更并重启)。三种方式本质是 “项目与 Tomcat 的关联方式”,具体如下:

方式一:直接将项目放入 Tomcat 的 webapps 目录

这是最简单的方式,无需额外配置,适合快速测试:

阅读全文 »

Web 存储(localStorage & sessionStorage)详解:用法、区别与实战指南

Web 存储是浏览器提供的客户端数据存储方案,通过键值对(Key-Value)形式将数据保存在用户本地,仅允许存储该数据的网页(同源页面)访问,无需与服务器交互,适用于 “临时状态保存”“用户偏好设置”“离线数据缓存” 等场景。Web 存储主要分为 localStorage(本地存储)sessionStorage(会话存储) 两种,二者 API 相似但生命周期、作用范围差异显著。从 “核心区别→API 详解→实战场景→注意事项” 四个维度,全面讲解 Web 存储的使用方法与最佳实践

localStorage 与 sessionStorage 核心区别

在学习具体用法前,需先明确二者的核心差异,避免使用场景混淆:

对比维度 localStorage sessionStorage
数据生命周期 永久存储,无过期时间(除非手动删除或清除浏览器数据) 临时存储,仅在当前窗口 / 标签页生命周期内有效(关闭窗口 / 标签页后自动删除)
作用范围 同源页面共享(同一协议、域名、端口的所有窗口 / 标签页) 仅当前窗口 / 标签页独立(即使同源,新窗口 / 标签页也无法访问)
存储容量 约 5MB(不同浏览器略有差异,无统一标准) 约 5MB(与 localStorage 一致)
数据持久化 浏览器重启、设备重启后数据仍保留 窗口关闭或浏览器重启后数据丢失
适用场景 用户偏好设置(如主题、语言)、长期离线数据缓存 临时表单数据(如未提交的表单内容)、页面间临时状态传递

localStorage 详解:永久本地存储

localStorage 用于长久保存同源页面的共享数据,数据存储在浏览器的本地文件中(不同浏览器存储位置不同),除非手动删除,否则会一直保留(即使关闭浏览器、重启设备)。

1. 核心 API

localStorage 是 window 对象的属性,所有 API 均为同步操作(执行时会阻塞后续代码,需注意避免大量数据操作):

阅读全文 »

HTML 超链接定位(锚点链接)详解:用法、场景与进阶技巧

HTML 超链接定位(又称 “锚点链接”)是通过 a 标签的 href 属性结合目标元素的 id(或 name)属性,实现 “页面内精准跳转” 或 “跨页面指定位置跳转” 的功能。其核心价值在于提升长页面的导航体验(如文档目录跳转、表单错误定位)和跨页面精准访问(如直接跳转到目标页面的某一章节)。从 “核心原理→基础用法→进阶场景→注意事项” 四个维度,全面讲解锚点链接的使用方法。

核心原理

锚点链接的实现依赖两个核心部分:

  1. 触发链接:带有 href="#目标ID"a 标签(点击后触发跳转);
  2. 目标锚点:带有 id="目标ID"(或 name="目标ID",旧语法)的元素(跳转的终点位置)。

当用户点击触发链接时,浏览器会:

  • 解析 href 中的 #目标ID,查找当前页面(或目标页面)中 id 与 “目标 ID” 匹配的元素;
  • 将页面滚动到该元素的位置,使其处于可视区域内(通常是页面顶部或中部对齐)。

基础用法:页面内锚点定位

页面内锚点是最常用的场景,适用于长文档、长表单、多章节页面(如帮助文档、产品介绍页),实现 “目录→内容” 的快速跳转。

1. 标准语法(推荐用 id 定义锚点)

阅读全文 »

Nginx 状态检查配置:通过 stub_status 监控服务状态

Nginx 的stub_status模块提供了简单的状态检查功能,可实时查看服务器的连接数、请求处理情况等关键指标,是监控 Nginx 运行状态的常用工具。本文详细讲解stub_status的配置方法、状态指标含义及实战应用。

启用 stub_status 模块

stub_status是 Nginx 的非核心模块,默认不编译,需在编译 Nginx 时通过--with-http_stub_status_module参数启用。

  • 检查模块是否已安装
    执行nginx -V,若输出包含--with-http_stub_status_module,则模块已启用。

基础配置:暴露状态检查地址

通过location块配置状态检查路径(如/nginx_status),示例如下:

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name example.com;

# 配置状态检查路径
location /nginx_status {
stub_status on; # 启用状态检查
allow 192.168.1.0/24; # 仅允许内部网段访问(安全加固)
deny all; # 拒绝其他IP访问
}
}

配置说明

  • stub_status on:开启状态检查功能,访问/nginx_status时返回状态信息;
  • allow/deny:限制访问来源(必填!避免状态信息暴露给公网,存在安全风险)。

状态信息详解

配置完成后,通过curl http://example.com/nginx_status访问,返回内容如下:

阅读全文 »

Spring Security 注解使用详解

在 Spring Boot 项目中,Spring Security 提供了丰富的注解来简化权限控制配置,无需大量 XML 或 Java 配置类即可实现精细的权限管理。使用前需先开启注解支持,再根据业务场景选择合适的注解进行权限控制。以下是完整的注解使用指南,包含开启方式、核心注解详解、使用场景及注意事项。

开启 Spring Security 注解支持

所有 Spring Security 方法级注解都需要通过 @EnableGlobalMethodSecurity 注解开启(Spring Security 5.6+ 推荐使用 @EnableMethodSecurity,功能更强大且支持 Lambda 表达式)。

传统方式:@EnableGlobalMethodSecurity(适用于旧版本)

该注解用于开启全局方法级安全控制,通过属性启用不同类型的注解,需添加在配置类上(如 SecurityConfig)。

1
2
3
4
5
6
7
8
9
10
11
12
13
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

// 开启 Web 安全 + 全局方法级安全注解
@EnableWebSecurity
@EnableGlobalMethodSecurity(
securedEnabled = true, // 开启 @Secured 注解支持
prePostEnabled = true, // 开启 @PreAuthorize/@PostAuthorize 注解支持
jsr250Enabled = true // 开启 JSR-250 注解(如 @RolesAllowed、@PermitAll)
)
public class SecurityConfig {
// 其他 Security 配置(如密码编码器、认证管理器等)
}

推荐方式:@EnableMethodSecurity(Spring Security 5.6+)

@EnableMethodSecurity@EnableGlobalMethodSecurity 的替代方案,默认开启 prePostEnabled = true,支持更简洁的配置和 Lambda 表达式,推荐在新版本中使用。

阅读全文 »