自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 收藏
  • 关注

原创 Spring Boot文件处理与存储详解

本文介绍了Spring Boot中的文件处理解决方案,主要包括文件上传、下载、存储和处理功能。核心内容包括:1)文件处理功能概述,支持多种存储方式(本地、云存储、分布式存储)和文件操作;2)基础配置与依赖管理,提供Spring Boot Web、文件上传等核心组件配置;3)文件上传实现方案,包含单文件/多文件上传控制器、分片上传和合并功能。文章通过代码示例展示了文件上传的完整实现流程,包括配置参数、控制器设计和文件服务处理逻辑,为开发者提供了完整的文件处理技术方案。

2025-10-28 08:46:57 819

原创 Spring Boot国际化与本地化详解

摘要 Spring Boot国际化(i18n)开发指南:介绍了国际化概念及其重要性(支持全球市场、提升用户体验、满足合规要求等),详细说明了国际化组件(Locale、MessageSource等)和核心依赖配置。提供了基础配置方法,包括YAML配置文件和Java配置类,展示了如何配置LocaleResolver和消息资源。文章还包含英文消息资源文件示例,涵盖了通用消息、用户相关字段、验证消息等常见场景的国际化文本。通过这套方案,开发者可以轻松实现多语言支持,满足不同地区的应用需求。

2025-10-28 08:46:17 593

原创 Spring Boot API文档与自动化测试详解

本文介绍了Spring Boot中API文档生成与自动化测试的最佳实践,重点讲解了SpringDoc OpenAPI工具的使用。内容包括:API文档的重要性(提升开发效率、团队协作等)、主流工具对比(Swagger、Postman等)以及核心依赖配置。详细展示了SpringDoc的基础配置、OpenAPI自定义设置和API注解使用,通过代码示例演示了如何生成规范的API文档,包括接口描述、参数说明和响应定义。文章为开发者提供了完整的API文档生成解决方案。

2025-10-16 21:05:35 710

原创 Spring Boot消息队列与事件驱动详解

本文介绍了消息队列在分布式系统中的核心作用及Spring Boot实现方案。消息队列具有系统解耦、异步处理、削峰填谷、可靠性和扩展性等优势,支持点对点、发布订阅等多种模式。重点讲解了RabbitMQ的配置与实现,包括生产者端的简单消息发送、对象传输、确认机制、延迟消息等功能;消费者端展示了基础消费、对象处理、手动确认及错误处理等关键实现。通过Spring Boot AMQP组件,开发者可以快速构建高效可靠的消息队列系统,满足不同业务场景需求。

2025-10-16 21:04:56 1399

原创 Spring MVC 分布式事务与数据一致性教程

本文将系统介绍分布式事务的核心概念与实现方案。主要内容包括:分布式事务的定义及面临的网络分区、并发控制等挑战;CAP定理和BASE理论基础;Spring本地事务管理机制与分布式事务配置;两阶段提交(2PC)协议原理及实现;Saga模式、TCC模式等解决方案;最终一致性保证、分布式锁机制等关键技术;以及性能优化、监控和最佳实践。通过理论分析与代码示例相结合的方式,全面讲解分布式事务的常见问题与解决方案。

2025-10-15 09:13:34 843

原创 Spring MVC 多租户架构与数据隔离教程

多租户架构是一种软件架构模式,通过单个应用实例为多个租户提供服务,同时确保数据隔离和安全性。文章系统介绍了三种主流隔离策略:数据库级、表级和行级隔离,并提供了Spring MVC的实现方案,包括多数据源配置、租户上下文管理和实体基类设计。此外,还涵盖了租户识别、缓存隔离、安全控制以及性能优化等关键环节,为构建高效、安全的多租户系统提供了全面指导和技术实现参考。

2025-10-15 09:11:23 777

原创 Spring Boot企业级应用开发详解

本文介绍了企业级应用开发的关键要素和Spring Boot解决方案。企业级应用需具备高可用性、高性能、可扩展性、安全性等特点,并采用分层架构、微服务架构、领域驱动设计等架构模式。文中通过Maven依赖配置展示了Spring Boot的核心组件(Web、Data JPA、Security等),并以订单聚合根为例演示了领域驱动设计的具体实现,包括业务状态转换和持久化映射。该架构设计支持复杂的业务逻辑处理和系统扩展需求。

2025-10-15 08:30:07 1147 2

原创 Spring Boot性能优化详解

Spring Boot性能优化需从多维度入手,包括应用层、数据库、缓存、JVM和网络优化。关键指标涉及响应时间、吞吐量、资源利用率和错误率。JVM优化可通过参数调整(如-Xms/Xmx)、垃圾回收策略(G1GC)和内存管理(对象池)实现。数据库优化重点在于连接池配置(HikariCP)、查询优化(索引、分页、批量操作)和索引设计(复合/覆盖索引)。通过JMeter等工具进行性能测试,结合代码级优化(如并发集合、原子变量)和架构调整,可全面提升应用性能。

2025-10-15 08:29:36 463 1

原创 Spring Boot监控与运维详解

本文介绍了Spring Boot应用的监控与运维体系,涵盖监控体系、工具配置和核心功能实现。主要内容包括:1)监控体系的四个维度(应用、系统、业务、日志)及常用工具(Actuator、Prometheus等);2)Spring Boot Actuator的基础配置与扩展功能,如健康检查与自定义指标;3)日志监控的XML配置方案。通过相关依赖配置和代码示例,展示了如何构建完整的应用监控系统,确保应用稳定运行并提供运维决策支持。

2025-10-14 08:32:12 821

原创 Spring Boot异步编程详解

Spring Boot异步编程摘要:文章介绍了Spring Boot中的异步编程技术,重点讲解了@Async注解的使用方法。异步编程能够提高系统并发性、改善用户体验并优化资源利用率。主要内容包括:1)异步编程模式(回调、Future、CompletableFuture等);2)@Async注解实现无返回值/有返回值异步方法;3)线程池配置与异常处理机制。通过合理配置线程池和异常捕获,可以构建高效的异步服务,提升系统性能。文章还提供了核心依赖配置和代码示例,帮助开发者快速实现异步功能。

2025-10-14 08:30:29 535

原创 Spring Boot缓存机制详解

Spring Boot缓存技术详解:本文系统介绍了Spring Boot中的缓存实现方案,包括缓存类型(本地/分布式/数据库/HTTP)、常用策略(Cache-Aside/Read-Through等)和核心依赖。重点讲解了Spring Cache注解的使用方法,如@Cacheable(缓存查询)、@CachePut(更新缓存)、@CacheEvict(清除缓存)等,并提供了条件缓存和组合缓存的操作示例。

2025-10-13 20:30:45 1300

原创 Spring Boot微服务架构详解

微服务架构摘要: 微服务是一种将应用拆分为独立小型服务的架构模式,具有服务独立部署、技术多样化和容错性强等特点。Spring Boot和Spring Cloud提供了完整的微服务解决方案,核心组件包括服务注册发现(Eureka)、配置中心、API网关、负载均衡和熔断器等。示例展示了Eureka服务端/客户端的搭建,以及通过OpenFeign实现服务间通信,支持获取用户订单等跨服务调用。该架构通过模块化设计提高了系统的可扩展性和维护性,适合复杂业务场景的分布式系统开发。

2025-10-13 20:29:49 651

原创 Spring Boot测试框架详解

Spring Boot提供了完善的测试框架,支持多种测试类型:单元测试、集成测试、Web测试、数据访问测试和安全测试。核心依赖包括spring-boot-starter-test、TestContainers和Mockito。在单元测试方面,通过Mockito可模拟依赖项进行服务层测试,示例展示了用户服务的CRUD操作测试。工具类测试则演示了参数化测试的基本用法。该测试框架能帮助开发者构建可靠的测试套件,确保代码质量。

2025-10-12 20:54:41 398 1

原创 Spring Boot安全框架详解

Spring Security是Spring生态中的安全框架,为应用提供认证、授权等安全功能。核心概念包括认证(验证身份)、授权(访问控制)和角色权限管理。基础配置需继承WebSecurityConfigurerAdapter类,通过HttpSecurity配置访问规则、登录/登出行为和CSRF防护。使用BCryptPasswordEncoder进行密码加密,用户实体包含账号状态和角色集合。典型配置包括开放公共URL、设置权限路由(如/admin需ADMIN角色)、自定义登录页等

2025-10-12 20:53:58 558 1

原创 Spring Boot数据访问层详解

Spring Boot数据访问层支持多种技术,包括JPA、MyBatis、Redis和MongoDB等。文章首先介绍了核心依赖配置,如spring-boot-starter-data-jpa、spring-boot-starter-data-redis等。然后重点讲解了Spring Data JPA的实体类设计,展示了包含ID、用户名、邮箱等字段的User类,并详细说明了字段约束、枚举类型、关联关系以及JPA回调方法。该实体类示例了JPA的常用注解如@Entity、@Table、@Id等,并提供了完整的ge

2025-10-08 08:58:31 1204

原创 Spring MVC RESTful API设计教程

本文系统介绍了REST API设计的最佳实践,涵盖REST架构约束、资源命名规范、统一响应格式等核心原则,并详细探讨了HATEOAS实现、HTTP状态码应用、API版本控制等关键技术。通过代码示例展示了资源操作的标准RESTful设计,包括GET/POST/PUT/DELETE方法的使用,以及Spring HATEOAS的集成方法。文章还涉及错误处理标准化、分页过滤、缓存策略、API安全实现、性能优化、测试策略和文档化等完整API生命周期管理要点,为构建标准化、可扩展的RESTful API提供了全面指导。

2025-10-08 02:56:30 657

原创 Spring Boot Web开发详解

Spring Boot提供了强大的Web开发支持,通过自动配置简化了Spring MVC、REST API和模板引擎的集成。核心特性包括自动配置组件、RESTful支持、静态资源处理和JSON处理。开发时需引入spring-boot-starter-web等依赖。控制器开发示例展示了基础CRUD操作,使用@RestController和@RequestMapping注解处理HTTP请求,支持路径变量、查询参数、请求头等多种参数绑定方式。响应处理可通过ResponseEntity自定义状态码和响应体,实现灵活

2025-10-07 09:54:54 1405

原创 Spring Boot配置详解

Spring Boot提供了灵活多样的配置管理方式,支持Properties、YAML等多种配置文件格式,并按优先级加载配置。配置内容包括服务器、数据库、JPA、日志等参数设置,并支持多环境配置(开发/测试/生产环境)。通过@ConfigurationProperties注解可将配置属性绑定到Java类,实现类型安全的配置管理。YAML格式相比Properties具有更简洁的层次结构,适合复杂配置场景。配置优先级从高到低依次为:命令行参数、环境变量、JNDI属性、系统属性和配置文件。

2025-10-07 09:53:40 330

原创 Spring Boot入门指南

Spring Boot是一个简化Spring应用开发的框架,提供自动配置、起步依赖等核心特性,支持快速构建微服务。开发需JDK8+、Maven/Gradle等环境,可通过Spring Initializr或IDE创建项目。项目结构包含主启动类、配置文件和控制器,支持REST API开发。配置文件支持.properties和.yml格式,提供开发工具如DevTools实现热部署。测试方面支持单元测试和集成测试,确保应用质量。Spring Boot简化了配置和部署流程,是构建现代Java应用的理想选择。

2025-10-07 09:53:02 602

原创 Spring WebFlux 响应式编程教程

本文介绍了基于Spring WebFlux的响应式编程技术,对比了传统Spring MVC与WebFlux的核心差异,重点阐述了响应式编程在非阻塞I/O、背压处理和弹性架构方面的优势。文章详细讲解了Reactor编程模型的核心操作符(Mono/Flux)及其应用场景,包括异步组合、背压控制和错误处理等关键技术。同时提供了完整的Maven依赖配置,涵盖WebFlux核心组件、响应式数据库访问(R2DBC)和安全认证(Spring Security Reactive)等关键模块,为构建高性能响应式应用提供了全面

2025-10-06 15:03:15 1123

原创 Spring 集成框架与AutoConfiguration

本文介绍了Spring Integration框架的核心概念与实现,主要包括消息驱动架构的基本组件和配置方式。Spring Integration基于企业集成模式(EIP),提供了消息通道、转换器、路由器、过滤器等核心组件。文章详细展示了不同通道类型的配置方法,包括点对点通道、发布订阅通道、队列通道等,并演示了通道拦截器的实现。此外,还介绍了Maven依赖配置和自动装配机制,为开发者构建企业级集成应用提供了完整的技术方案和实施指南。

2025-10-06 15:02:40 589

原创 Spring Cloud 微服务架构教程

本文介绍了Spring Cloud微服务架构的核心组件与实现方案。微服务架构具有独立部署、技术栈多样化、故障隔离和弹性扩展等优势。Spring Cloud提供了完整的微服务生态系统,包括服务注册与发现(Eureka)、配置管理、服务间通信(Feign)、负载均衡、断路器模式(Resilience4j)、API网关、分布式链路追踪(Sleuth)等核心功能。文章详细展示了Eureka服务注册中心的配置方法,包括服务端和客户端的实现代码,以及相关的YML配置参数。通过Maven依赖管理,可以便捷地集成各项微服务

2025-10-06 15:01:26 603

原创 Spring 事件驱动架构教程

本文介绍了Spring事件机制的核心概念与应用实践。主要内容包括:1)事件驱动架构的优势(松耦合、可扩展性、异步处理等);2)Spring事件处理流程与基础配置;3)内置事件类型(如ContextRefreshedEvent、ApplicationReadyEvent等)的使用方法;4)自定义事件基类BaseDomainEvent的设计实现,包含事件ID、时间戳、用户信息等通用字段;5)事件监听器的实现方式与异步处理机制。文章提供了详细的代码示例,展示了如何利用Spring事件机制构建灵活、高效的组件间通信

2025-10-06 13:55:04 932

原创 Spring MVC API文档与自动化测试教程

本文介绍了Spring MVC框架中API开发的全流程实践,重点涵盖Swagger/OpenAPI集成、文档生成与管理、API First开发模式等核心内容。通过SpringDoc配置展示了如何构建完善的API文档系统,包括全局安全认证、统一响应模型和错误处理机制。文章还详细说明了控制器级别的文档注解使用,如@Tag、@Operation等,以及自动生成客户端代码、契约测试等现代API开发技术。最后总结了API监控、版本管理和性能测试等全生命周期管理的最佳实践,为构建企业级RESTful API提供完整技术

2025-10-06 13:54:28 560

原创 Spring Boot整合RabbitMQ

本文介绍了Spring Boot与RabbitMQ的整合应用,包括基础概念、项目搭建和实现方法。首先回顾了RabbitMQ的核心组件(生产者、交换机、队列等)和四种交换机类型。然后详细展示了如何在Spring Boot项目中配置RabbitMQ连接、消息序列化和确认机制。重点讲解了简单模式的实现,包括消息实体类定义、生产者发送消息的完整流程,其中涉及消息持久化、确认回调等关键特性。通过示例代码演示了如何构建一个完整的订单消息处理系统,为开发者提供了实用的技术参考。

2025-10-05 01:45:00 692

原创 Spring Boot Actuator 运维监控教程

Spring Boot Actuator 提供了全面的应用监控和管理功能,包括健康检查、指标收集、日志管理等生产级特性。通过配置端点(如 /health、/metrics)可获取应用状态和性能数据,支持自定义端点和安全控制。集成Prometheus和Grafana可实现指标可视化和告警功能。关键配置包括依赖引入、端点暴露设置、安全权限管理,适用于企业级应用监控需求。

2025-10-04 09:44:30 546

原创 Spring WebSocket 实时通信教程

本文介绍了基于Spring的WebSocket技术实现实时通信的综合方案。内容包括WebSocket与HTTP协议的对比分析、Spring WebSocket基础配置、STOMP协议集成、消息处理机制设计、安全权限控制、集群部署方案等核心技术要点。通过聊天系统和实时通知系统两个典型应用场景,展示了WebSocket在实际项目中的实现方式,并提供了性能优化和故障处理的实用建议。文章还给出了完整的Spring WebSocket配置代码示例,包括WebSocket处理器实现、消息路由、会话管理等功能模块。

2025-10-04 09:43:51 715

原创 Spring MVC RESTful API设计教程

本文系统介绍了REST API设计的最佳实践,涵盖REST架构约束、资源命名规范、统一响应格式等核心原则,并详细探讨了HATEOAS实现、HTTP状态码应用、API版本控制等关键技术。通过代码示例展示了资源操作的标准RESTful设计,包括GET/POST/PUT/DELETE方法的使用,以及Spring HATEOAS的集成方法。文章还涉及错误处理标准化、分页过滤、缓存策略、API安全实现、性能优化、测试策略和文档化等完整API生命周期管理要点,为构建标准化、可扩展的RESTful API提供了全面指导。

2025-10-03 20:10:38 802

原创 Spring Data JPA深入应用教程

本文介绍了Spring Data JPA的核心功能与应用实践。主要内容包括:1)Spring Data JPA的Repository抽象和自动查询生成特性;2)实体类与关联关系的定义方法;3)基于命名规则的查询方法实现;4)分页排序、事务管理和审计功能等高级特性;5)性能优化与测试策略。通过示例代码展示了用户与订单模型的实现方式,包括基础CRUD操作、自定义查询及关联映射配置。文章最后总结了Spring Data JPA的最佳实践方案,为开发者提供了一套完整的JPA应用指南。

2025-10-03 11:31:18 580

原创 Spring MVC 安全框架集成教程

这篇文章介绍了Spring Security框架的核心功能与配置方法。主要内容包括:Spring Security概述(认证、授权等核心概念)、基础安全配置(配置类、用户详情服务)、用户认证与授权机制、权限控制策略、安全过滤器链、JWT和OAuth2集成、CSRF防护、方法级安全控制、安全测试以及常见漏洞防护。文章提供了详细的代码示例(如Security配置类、用户详情服务实现),展示了如何通过Spring Security实现Web应用的安全防护,包括用户认证、权限控制、JWT集成等关键功能。整体内容全面

2025-10-03 11:29:47 806

原创 Spring MVC 性能调优与部署运维

本文系统介绍了Java应用性能调优的完整方案,涵盖从JVM优化到高并发架构设计的全流程。主要内容包括:1)性能调优的层次结构和测量驱动原则;2)JVM参数配置与垃圾回收监控;3)Spring MVC的异步处理和JSON序列化优化;4)数据库与缓存策略优化;5)并发处理与生产环境部署要点。通过多层次的优化手段,构建高效稳定的Java应用系统,特别强调"测量优于猜测"的优化理念,提供了具体的监控指标收集和性能分析代码示例。

2025-10-03 11:26:43 890

原创 Spring MVC 测试与调试指南

本文介绍了Spring MVC应用的测试策略与方法,采用测试金字塔模型,从单元测试(大量)、集成测试(适量)到端到端测试(少量)分层展开。重点讲解了单元测试实现,包括使用Mockito模拟依赖、测试服务层逻辑、验证方法调用等。示例演示了用户服务层的测试用例,展示了如何测试正常流程和异常情况。文章还提供了Spring测试框架的依赖配置和基础测试类结构,为构建可靠的Spring应用测试体系提供了实用指导。

2025-10-03 11:20:19 657

原创 Spring MVC 高级特性与实战应用教程

本文介绍了Spring拦截器的深入应用,重点解析了HandlerInterceptor接口及其三个核心方法:preHandle、postHandle和afterCompletion。通过一个用户认证拦截器的实现示例,展示了如何检查公开URL、验证用户登录状态、更新访问时间等常见场景。该拦截器还演示了在postHandle中添加用户信息到模型,以及在afterCompletion中记录请求日志的实践。拦截器适用于认证授权、日志记录、数据注入等横切关注点,是Spring MVC中实现AOP的重要方式。

2025-10-03 11:13:40 1326

原创 Spring MVC 表单处理和验证

本文介绍了Spring MVC表单处理的完整流程及关键组件。主要内容包括:表单处理的基本流程(显示、提交、绑定、验证等)、Spring MVC的核心表单组件(标签库、数据绑定、验证框架等)、基础表单创建示例(用户注册表单的实体类定义、控制器处理和HTML页面实现)。文章还涵盖了数据绑定转换、验证机制(JSR-303 Bean验证和自定义验证器)、错误处理、复杂表单、文件上传、国际化以及AJAX表单处理等高级主题,最后总结了表单处理的最佳实践和常见问题解决方案。

2025-10-03 11:01:39 614

原创 Spring MVC 视图技术和数据处理教程

本文系统介绍了Spring MVC中的视图技术,涵盖传统JSP/JSTL和现代模板引擎(Thymeleaf、FreeMarker)的实现。主要内容包括:1)视图技术分类与选择;2)视图解析器(InternalResourceViewResolver、ThymeleafViewResolver、FreeMarkerViewResolver)的配置与实现原理;3)多视图解析器的整合配置;4)各模板引擎的详细配置方法。文章通过代码示例展示了不同视图技术的配置方式,并比较了它们的特性与适用场景,为开发者选择适合的视

2025-10-03 10:59:49 889

原创 Spring MVC 控制器和请求处理教程

本文介绍了Spring MVC控制器的核心功能和请求处理机制。主要内容包括:控制器概述(传统Controller和RESTful Controller)、@RequestMapping注解详解(路径映射规则、精确匹配、路径变量、通配符等)、HTTP方法快捷注解(@GetMapping, @PostMapping等)以及表单处理示例。文章详细讲解了如何通过注解配置请求映射,处理不同HTTP方法,并展示了表单显示和提交的完整流程,为开发人员提供了实用的Spring MVC控制器开发指南。

2025-10-03 10:54:25 809

原创 Spring MVC 基础教程

Spring MVC基础教程摘要:Spring MVC是基于MVC设计模式的Java Web框架,提供松耦合的组件架构和强大的功能特性。教程涵盖MVC模式概念、环境搭建(JDK 8+、Maven 3.6+、Tomcat 9+)、项目结构设计及核心组件(DispatcherServlet、HandlerMapping等)。通过代码示例展示模型-视图-控制器的协作方式,并比较了Spring MVC与其他Web框架的优缺点。教程还包含Maven依赖配置和JSON支持等实用内容,为开发者提供完整的入门指南。

2025-10-03 10:53:48 621

原创 RabbitMq入门之六种工作模式

RabbitMQ工作模式摘要:RabbitMQ提供6种工作模式,其中简单模式(1生产者1消费者)和工作队列模式(1队列多消费者)最基础。简单模式使用默认direct交换机,通过队列传递消息;工作队列模式将消息轮询分发给多个消费者。Java通过JMS规范操作MQ,需创建连接工厂、建立信道、声明队列。生产者发送消息到队列,消费者监听队列消费消息,消息默认平均分配。持久化设置可确保MQ重启后队列和消息不丢失。开发时需注意连接参数配置、资源关闭及消息确认机制。

2025-10-02 22:15:16 821

原创 RabbitMq入门之概括

消息队列(MQ)是一种在消息传输过程中 buffercings 组件,用于异步通信。它通过队列机制实现消息的存储和转发,具有应用解耦、异步提速和削峰填谷等 major发作。MQ在电商秒杀、消息分发、数据同步等场景中发挥重要作用,但也会引入系统可用性降低、复杂度增加等挑战。RabbitMQ是基于AMQP协议的MQ实现,采用虚拟主机和信道机制提高性能。其工作原理包括生产者、交换机、队列和消费者等核心组件,通过TCP连接和信道实现高效通信。安装RabbitMQ时需要先部署Erlang环境,并配置相关网络参数。

2025-10-02 22:05:08 891

原创 网络编程基础

本文介绍了Java网络编程的基础知识与实践,主要内容包括: 网络编程概述:解释网络编程概念和Java网络特点 网络模型与协议:详细讲解TCP/IP模型和TCP/UDP/HTTP协议 Socket编程基础:介绍Socket类、ServerSocket类等核心API TCP/UDP编程实践:提供完整的服务器和客户端代码示例 多线程服务器实现:展示如何处理并发客户端连接 文章包含大量可直接运行的代码示例,如TCP服务器/客户端、UDP服务器等,并详细解释了网络编程的关键概念和实现步骤,适合Java开发者学习网络编

2025-08-29 22:37:13 997

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除