0%

Shell 重定向详解:从标准流到 tee 命令的完整指南

在 Shell 中,输入输出重定向是控制命令数据流的核心机制,通过灵活处理标准输入(stdin)、标准输出(stdout)和标准错误(stderr),可以实现日志记录、错误屏蔽、批量处理等多种功能。本文将系统讲解重定向的原理、用法及 tee 命令的应用。

标准流与文件描述符

Shell 中所有命令的输入输出都基于三个标准流,每个流对应一个文件描述符(用于在系统中标识流):

标准流 功能描述 文件描述符 默认设备
stdin 标准输入(命令读取数据) 0 键盘
stdout 标准输出(命令正常输出) 1 终端屏幕
stderr 标准错误(命令错误输出) 2 终端屏幕

这些流可以被重定向到文件、设备或其他命令,改变数据的默认流向。

输入重定向(<

输入重定向用于将命令的输入来源从默认的键盘改为指定文件,语法为:
命令 < 输入文件

常用场景

  • 批量输入数据(如给 mail 命令提供邮件内容);
  • 替代管道传递文件内容(等价于 cat 输入文件 | 命令)。

示例

阅读全文 »

MySQL 忘记密码解决方案:重置密码的完整步骤

忘记 MySQL 密码是常见问题,可通过跳过权限验证的方式重置密码。以下是针对不同操作系统的详细步骤,以及密码策略的调整方法。

通用重置步骤(以 MySQL 8.0 为例)

停止 MySQL 服务

首先确保 MySQL 服务已停止,否则无法进行后续操作:

1
2
3
4
5
# Linux/Mac 系统
sudo systemctl stop mysql # 或 mysql.server stop(取决于安装方式)

# Windows 系统(管理员命令提示符)
net stop mysql

跳过权限验证启动 MySQL

以跳过权限表的方式启动 MySQL,此时登录无需密码:

1
2
3
4
5
# Linux/Mac 系统(后台启动,日志输出到文件)
sudo mysqld --skip-grant-tables --user=mysql > /dev/null 2>&1 &

# Windows 系统(需切换到 MySQL 的 bin 目录,如 D:\mysql-8.0\bin)
mysqld --skip-grant-tables

注意

  • 执行此命令时,确保 MySQL 服务已完全停止,否则会提示 “端口被占用”。
  • 该模式下 MySQL 安全性极低,重置密码后需立即关闭并重启服务。

无密码登录 MySQL

新开一个终端 / 命令提示符窗口,直接登录 MySQL(无需输入密码):

1
mysql -u root  # 直接回车,无需输入密码

刷新权限并重置密码

登录后,需先刷新权限表,再修改 root 密码:

阅读全文 »

Spring Boot 扩展 Spring MVC 详解:保留自动配置与完全自定义配置指南

Spring Boot 对 Spring MVC 提供了完善的自动配置(如默认的 DispatcherServlet、视图解析器、静态资源映射),可满足大部分场景需求。但实际开发中,常需自定义 MVC 特性(如添加拦截器、调整静态资源路径、自定义消息转换器)。从 “自动配置基础→扩展配置(保留自动配置)→完全自定义(抛弃自动配置)→底层原理” 四个维度,系统讲解 Spring Boot 扩展 Spring MVC 的实现方式与底层逻辑,帮你灵活控制 MVC 配置。

Spring Boot 对 Spring MVC 的自动配置回顾

在学习 “扩展” 前,需先明确 Spring Boot 为 Spring MVC 提供的默认自动配置(核心由 WebMvcAutoConfiguration 类实现),避免重复配置或配置冲突:

自动配置项 核心作用 默认行为示例
DispatcherServlet Spring MVC 核心控制器 自动注册,映射路径为 /(所有请求)
静态资源映射 处理 CSS、JS、图片等静态资源 映射 /static/**/public/**classpath:/static/ 等目录
视图解析器 解析逻辑视图名到物理视图路径 支持 Thymeleaf(默认)、JSP 等,前缀 classpath:/templates/,后缀 .html
消息转换器 处理请求体 / 响应体与 Java 对象的转换 默认支持 JSON(MappingJackson2HttpMessageConverter)、表单格式等
拦截器自动注册 注册 Spring 内置拦截器(如路径匹配拦截器) 无自定义拦截器,需手动扩展

扩展 Spring MVC:保留自动配置(推荐)

大部分场景下,无需完全替换自动配置,只需在其基础上补充自定义逻辑(如添加拦截器、调整静态资源)。Spring Boot 提供 WebMvcConfigurer 接口实现这一需求,且 Spring Boot 2.x+ 推荐直接实现该接口(替代过时的 WebMvcConfigurerAdapter)。

1. 核心接口:WebMvcConfigurer(Spring Boot 2.x+ 推荐)

WebMvcConfigurer 是 Spring MVC 提供的 “全局配置接口”,包含一系列 default 方法(Java 8+ 特性),开发者可按需重写,无需实现所有方法。常用方法及作用如下:

阅读全文 »

Spring Boot 定制嵌入式 Servlet 容器详解:配置修改与容器替换实战

Spring Boot 内置了 Tomcat(默认)、Jetty、Undertow 三种主流 Servlet 容器,无需外置服务器即可通过 java -jar 直接启动应用。实际开发中,常需根据需求 “修改容器配置”(如端口、编码)或 “替换容器”(如用 Jetty 替代 Tomcat)。从 “容器配置修改(两种方式)→ 容器替换(Tomcat 转 Jetty/Undertow)→ 底层原理” 三个维度,系统讲解嵌入式 Servlet 容器的定制方法,帮你灵活掌控应用部署环境。

嵌入式 Servlet 容器简介

Spring Boot 嵌入式容器的核心价值是 “简化部署”—— 无需手动安装、配置外置服务器(如 Tomcat),应用打包为 JAR 包后可独立运行。三种内置容器的特点对比如下:

容器名称 核心特点 适用场景 默认依赖 artifactId
Tomcat 功能全面、兼容性好、社区活跃 绝大多数 Web 应用(默认选择) spring-boot-starter-tomcat
Jetty 轻量级、启动快、内存占用低 轻量级应用、微服务(如 Spring Cloud 服务) spring-boot-starter-jetty
Undertow 高性能、异步非阻塞、支持 HTTP/2 高并发场景(如秒杀、API 网关) spring-boot-starter-undertow

默认情况下,引入 spring-boot-starter-web 会自动依赖 Tomcat 容器,无需额外配置。

修改嵌入式 Servlet 容器配置

Spring Boot 提供两种方式修改容器配置(如端口、编码、连接超时),分别适用于 “简单配置” 和 “复杂定制” 场景。

方式一:配置文件修改(推荐,简单场景)

通过 application.propertiesapplication.yml 直接配置 server 前缀的属性,Spring Boot 会自动将配置映射到容器(底层通过 ServerProperties 类实现)。

1. 核心配置属性(常用)
配置项 作用描述 示例值 适用容器
server.port 应用端口(0 表示随机端口) 80810 所有
server.servlet.context-path 应用上下文路径(默认 / /demo 所有
server.tomcat.uri-encoding Tomcat 编码格式(避免中文乱码) UTF-8 Tomcat
server.tomcat.max-threads Tomcat 最大线程数(控制并发能力) 200 Tomcat
server.tomcat.connection-timeout Tomcat 连接超时时间(毫秒) 20000(20 秒) Tomcat
server.jetty.max-http-post-size Jetty 最大 POST 请求大小 10MB Jetty
server.undertow.io-threads Undertow IO 线程数(处理连接) 4(默认 CPU 核心数) Undertow
2. 配置示例(YML 格式)
阅读全文 »

Spring Boot 多环境配置详解:从文件分离到 Bean 按需加载

在实际开发中,项目通常需要适配多种环境(如开发、测试、生产),不同环境的配置(如端口、数据库连接、第三方服务地址)往往不同。Spring Boot 提供了灵活的多环境配置方案,支持通过 “多配置文件分离” 或 “单 YML 多文档块” 实现环境隔离,并通过 @Profile 注解实现 Bean 的按需加载。从 “多环境配置方式→激活策略→Bean 环境隔离→实战最佳实践” 四个维度,系统讲解 Spring Boot 多环境配置的实现逻辑与实用技巧。

多环境配置的核心思想

Spring Boot 多环境配置的核心是 “环境标识(Profile)+ 配置隔离”:

  1. 环境标识:用 dev(开发)、test(测试)、prod(生产)等标识不同环境;
  2. 配置隔离:为每个环境单独维护配置(或在同一文件中用文档块隔离),避免配置混杂;
  3. 按需激活:启动时指定要激活的环境,Spring Boot 自动加载对应配置,无需修改代码。

多环境配置的两种核心方式

Spring Boot 支持两种主流的多环境配置方式,分别适用于 “配置项较多” 和 “配置项较少” 的场景。

方式一:多配置文件分离(推荐,配置项较多时)

通过创建多个以 application-{profile}.properties/yml 命名的配置文件,为每个环境单独维护配置,默认配置文件(application.properties/yml)负责激活环境。

1. 配置文件命名规则
阅读全文 »