0%

Spring Boot SpringApplicationRunListener 详解:启动流程的 “事件监听器”

SpringApplicationRunListener 是 Spring Boot 应用启动过程中的核心扩展接口,它通过 “监听启动生命周期的关键节点”,允许开发者在应用启动的不同阶段插入自定义逻辑(如日志埋点、环境校验、资源初始化)。从 “核心作用→启动阶段映射→工作机制→自定义实战” 四个维度,系统讲解 SpringApplicationRunListener 的原理与使用,帮你掌握 Spring Boot 启动流程的扩展能力。

核心定位:启动流程的 “钩子”

SpringApplicationRunListener 本质是 “启动生命周期监听器”,它与 Spring Boot 应用的启动流程深度绑定 ——Spring Boot 在启动的每个关键节点(如 “开始启动”“环境准备完成”“上下文创建”)都会主动调用监听器的对应方法,从而触发开发者的自定义逻辑。

  • 不是主动执行逻辑:监听器本身不主导启动流程,而是 “被动接收” 启动节点的回调;
  • 专注启动阶段扩展:覆盖从 “启动开始” 到 “启动完成 / 失败” 的全流程,是比 CommandLineRunner/ApplicationRunner 更早的扩展点(后者仅在启动末尾执行);
  • 全局作用域:监听器作用于整个应用的启动过程,可用于全局初始化(如加载全局配置、初始化第三方组件)。

启动阶段与方法映射:每个方法对应什么时机?

Spring Boot 应用的启动流程可拆分为 7 个关键阶段,SpringApplicationRunListener 的每个方法精准对应一个阶段。我们逐一解析每个方法的触发时机和典型用途:

1. starting():启动 “刚刚开始”(最早阶段)

触发时机:

SpringApplication.run() 方法执行的第一行代码,此时:

阅读全文 »

MongoDB Shell 操作指南:从数据库管理到文档操作

MongoDB 提供了交互式 Shell(mongo)工具,用于直接操作数据库。本文通过 Shell 可以执行数据库创建、用户管理、文档 CRUD 等操作,是日常管理和调试的重要工具。本文详细介绍 MongoDB Shell 的核心操作。

数据库基本操作

切换 / 创建数据库

使用 use 命令切换到指定数据库,若数据库不存在则自动创建(但需插入数据后才会显示):

1
use mydb  # 切换到mydb数据库,不存在则创建

查看所有数据库

1
show dbs  # 列出所有非空数据库(空数据库不显示)

查看当前数据库

1
db  # 输出当前所在数据库名称

删除当前数据库

1
db.dropDatabase()  # 谨慎操作!删除当前数据库所有数据

用户管理

MongoDB 通过角色权限控制访问,支持创建不同权限的用户(如管理员、读写用户等)。

创建用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建超级管理员(root角色)
db.createUser({
user: "root", # 用户名
pwd: "root123", # 密码
roles: ["root"] # 角色(root为超级权限)
})

# 创建自定义权限用户
db.createUser({
user: "appuser",
pwd: "app123",
roles: [
{ role: "readWrite", db: "mydb" }, # 对mydb数据库有读写权限
{ role: "read", db: "logdb" } # 对logdb数据库有只读权限
]
})

常用角色说明

阅读全文 »

MongoDB 3.2 安装指南(Ubuntu 系统)

MongoDB 的安装过程涉及密钥导入、源配置和包管理,以下是针对 Ubuntu 系统(以 Ubuntu 14 为例)的详细安装步骤,适用于 MongoDB 3.2 版本。

准备工作

确保系统已更新到最新状态,并安装必要的依赖工具:

1
2
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y wget gnupg # 安装wget(下载工具)和gnupg(密钥管理)

导入 MongoDB 公钥

MongoDB 包使用 GPG 密钥签名,需先导入官方公钥以验证包的完整性:

1
2
# 下载并导入MongoDB 3.2的GPG密钥
wget -qO - https://www.mongodb.org/static/pgp/server-3.2.asc | sudo apt-key add -
  • 成功时会输出 OK
  • 若提示 gnupg 未安装,先执行 sudo apt-get install gnupg 再重试。

配置 MongoDB 软件源

创建 MongoDB 官方源的列表文件,以便 apt 工具识别并下载安装包:

阅读全文 »

解决 jinfo 报错:ptrace(PTRACE_ATTACH, ..) failed

在 Linux 系统中使用 jinfo 命令查看 Java 进程的 JVM 参数时,可能会遇到如下错误:

1
2
jinfo -flags 23765
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process: ptrace(PTRACE_ATTACH, ..) failed for 23765: Operation not permitted

这是由于 Linux 的 ptrace-scope 安全机制限制了进程调试权限导致的。本文将详细解释原因并提供临时和永久解决方案。

错误原因:ptrace-scope 机制

Linux 内核从 2.6.36 版本开始引入了 ptrace-scope 机制(属于 yama 安全模块),其目的是限制进程间的 ptrace 调用,防止恶意程序通过调试接口攻击正在运行的进程(如读取内存、注入代码等)。

阅读全文 »

升级 Node.js 版本:两种实用工具(n 与 nvm)的完整指南

在部署 Node.js 项目时,版本不兼容是常见问题。若服务器上的 Node.js 版本与项目要求不符,需进行升级。本文详细介绍两种主流升级工具 ——nnvm的使用方法,包括安装、版本管理及常见问题解决,帮助高效切换 Node.js 版本。

工具对比:n 与 nvm 的核心差异

在选择升级工具前,先了解两者的定位与适用场景:

工具 特点 适用场景
n 轻量级 Node.js 版本管理器,仅支持 Node.js 版本切换,依赖 npm 安装 简单场景,需快速切换全局 Node.js 版本
nvm 独立的版本管理工具,不依赖 npm,支持多版本并行安装与切换 复杂场景(如同时开发多个项目,需不同 Node.js 版本)

方式一:使用n升级 Node.js

n是 Node.js 官方推荐的轻量版本管理器,通过 npm 全局安装,操作简洁。

1. 安装n

1
2
3
4
5
# 清除npm缓存(避免安装冲突)
npm cache clean -f

# 全局安装n
npm install -g n

2. 核心操作:安装与切换版本

阅读全文 »