当前位置: 首页 > article >正文

Redis:延迟双删的适用边界与落地细节弦

pagehelper整合引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码GetMapping(/list/{pageNo})public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数据List allVip vipService.findAllVip();// 将数据封装到pageinfo对象中PageInfo pageInfo new PageInfo(allVip);return pageInfo;}web层响应结果的封装对于前后端分离的系统来说后端会返回json数据一般会封装一个R对象来解决统一响应格式问题。package com.ali.springboot3ssm.result;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;DataNoArgsConstructorAllArgsConstructorBuilder // 建造模式public class R {// 响应状态码private int code;// 消息描述成功或失败private String msg;// 响应对象任意类型对象private T data;public static R OK(T data) {return R.builder().code(200).msg(成功).data(data).build();}// 成功的方法public static R OK() {return R.builder().code(200).msg(成功).build();}// 失败的方法public static R FAIL(int code,String msg) {return R.builder().code(code).msg(msg).build();}public static R FAIL() {return R.builder().code(400).msg(失败).build();}}controller中使用GetMapping(/list/{pageNo})public R PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数,设置后会自动为查询语句加limitPageHelper.startPage(pageNo, 10);// 查询数据List allVip vipService.findAllVip();// 将数据封装到pageinfo对象中PageInfo pageInfo new PageInfo(allVip);return R.OK(pageInfo);}改进R对象添加一个枚举类型package com.ali.springboot3ssm.enums;import lombok.AllArgsConstructor;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.Setter;NoArgsConstructorAllArgsConstructorpublic enum CodeEnum {// 枚举的大括号一开始的位置必须有枚举值// 枚举值下面如果没有代码枚举值列表最后的“”可以省略// 枚举值下面如果有代码枚举值列表最后的“” 不可以省略OK(200, OK),FAIL(400, 失败),BAD_REQUEST(400, 失败),NOT_FOUND(400, 失败),INTERNAL_ERROR(400, 失败),MODIFICATION_ERROR(400, 失败),DELETION_ERROR(400, 失败),CREATE_ERROR(400, 失败);GetterSetterprivate int code;GetterSetterprivate String msg;}重写R类DataNoArgsConstructorAllArgsConstructorBuilder // 建造模式public class R {// 响应状态码private int code;// 消息描述成功或失败private String msg;// 响应对象任意类型对象private T data;public static R OK(T data) {return R.builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).data(data).build();}// 成功的方法public static R OK() {return R.builder().code(CodeEnum.OK.getCode()).msg(CodeEnum.OK.getMsg()).build();}// 失败的方法public static R FAIL(CodeEnum codeEnum) {return R.builder().code(codeEnum.getCode()).msg(codeEnum.getMsg()).build();}public static R FAIL() {return R.builder().code(CodeEnum.FAIL.getCode()).msg(CodeEnum.FAIL.getMsg()).build();}}事务管理spring boot自动配置了事务管理器。只需要使用Transactional注解标注需要事务控制的方法即可。就这么简单。怎么打war包修改pom文件warorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatorg.springframework.bootspring-boot-starter-tomcatprovided启动类继承SpringBootServletInitializer类并重写configure方法MapperScan(basePackages com.ali.springboot3ssm.repository)SpringBootApplicationpublic class Springboot3SsmApplication extends SpringBootServletInitializer {Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Springboot3SsmApplication.class);}public static void main(String[] args) {SpringApplication.run(Springboot3SsmApplication.class, args);}}日志处理抽象的日志框架什么时抽象的日志框架编译阶段可以使用抽象的日志框架能正常编译。但运行阶段必须提供具体的日志框架目的是具体的日志框架可灵活切换。抽象框架有SLF4J 、 Commons Logging。这2个都可以绑定具体的日志框架如Log4j、Log4j2、Logback、JUL具体的日志框架Log4j已过时、Log4j2推荐、Logback推荐、JULJava util Logging功能有限适合小型应用spring boot默认集成log back日志级别日志级别由低到高trace级别最低。记录最详细信息通常在调试时使用debug记录程序运行时的详细信息比如变量的值进入或退出某个方法等主要用于开发时调试info记录一般信息如系统启动、服务初始化完成等表示程序运行正常。warn警告信息error错误信息生成环境中 通常把日志级别设为info或更高级别开发或测试环境中设为debug或tracespring boot默认日志级别是infoSlf4j // 这是lombok的一个注解作用是为我们维护一个日志对象logSpringBootApplicationpublic class Springboot3SsmApplication {public static void main(String[] args) {SpringApplication.run(Springboot3SsmApplication.class, args);// 直接使用loglog.info(日志信息);}}调整日志级别# 调整日志级别logging.level.rootdebug日志的粗细粒度# 调整根日志级别全局的整个项目都是这个级别logging.level.rootdebug# 为特定包设置日志级别logging.level.com.ali.springboot3ssm.controllerdebug# 为特定类设置日志级别logging.level.com.ali.springboot3ssm.service.UserServicetrace# 在控制台中打印sql (这个包是Mapper类所在的包)logging.level.com.ali.springboot3ssm.repositorydebug日志输出到文件有2种方式这2种方式不能共存如果同时存在只有logging.file.name生效# 将日志文件输出到当前项目根目录下的log目录中。文件名默认spring.log 并且文件名不可修改# 路径可随便改。可以是硬盘上的任意有权限路径logging.file.path./log/# 日志文件输出到当前项目根目录下my.log文件。路径不可修改logging.file.namemy.log滚动日志防止日志无线增长将日志文件分割成多个文件避免单个文件过大难以处理# 此策略仅适合logback# 日志文件达到多大时进行归档,打成一个压缩包logging.logback.rollingpolicy.max-file-size10MB# 归档日志文件总共达到多大时删除logging.logback.rollingpolicy.total-size-cap50GB# 归档日志文件最多保留几天logging.logback.rollingpolicy.max-history60#启动项目时是否清理归档日志文件logging.logback.rollingpolicy.clean-history-on-startfalse# 归档日志文件名格式logging.logback.rollingpolicy.file-name-pattern${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz日志框架切换先排除log back 再引入新依赖org.springframework.bootspring-boot-starter-loggingorg.springframework.bootspring-boot-starter-log4j2识局阉坏

相关文章:

Redis:延迟双删的适用边界与落地细节弦

pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...

大模型上线后模型突变怎么办:从灰度失败到秒级回滚的7个关键检查点

第一章:大模型工程化版本管理与回滚机制 2026奇点智能技术大会(https://ml-summit.org) 大模型工程化中的版本管理远超传统软件的 Git commit 粒度,需同时追踪模型权重、Tokenizer 配置、训练超参、推理服务镜像及依赖环境快照。单一 SHA 哈希已无法承载…...

Unity发布京东小游戏笔

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

k8s集群搭建时提示Unable to connect to the server: tls: failed to verify certificateUnable to connect to the

当执行kubeadm init后kubeadm init \--apiserver-advertise-address192.168.79.132 \--pod-network-cidr192.168.0.0/16 \--kubernetes-version1.31.2 \--image-repository registry.aliyuncs.com/google_containerskubeadm init \--apiserver-advertise-address192.168.79.132…...

SITS2026平台重构全记录:从单体Java商城到LLM+RAG驱动的AI原生电商,6周完成核心链路迁移并提升GMV 42%

第一章:SITS2026案例:AI原生电商平台实践 2026奇点智能技术大会(https://ml-summit.org) SITS2026是面向下一代电商基础设施的AI原生平台原型,由阿里云与浙江大学联合实验室在2024年Q4启动构建,于2025年Q2完成全链路灰度验证。该…...

一文搞懂:如何用 Spring AI 搭建 MCP Server 和 Client

MCP 概述 Model Context Protocol(MCP) 是一套标准化协议,用于实现 AI 模型与外部工具或资源的交互。它提供一致的接口,使 AI 模型能够访问数据库、API、文件系统及其他外部服务,同时支持多种传输机制,满足…...

GreaterWMS 开源库存管理系统深度解析:现代化仓储管理的架构与实践指南

GreaterWMS 开源库存管理系统深度解析:现代化仓储管理的架构与实践指南 【免费下载链接】GreaterWMS This Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I sta…...

Android权限延时动态声明机制和可行的解决方案

Android权限延时动态声明机制和可行的解决方案核心结论Android系统权限无法真正做到"运行时动态声明",但可以通过以下方案实现类似效果:方案一:动态功能模块(官方推荐)原理说明┌─────────────…...

万东医疗2026 CMEF发布影像智能体矩阵

当算力指数级增长,大模型渗透到每一处角落,人工智能正在重写医疗的底层代码。但问题从来不是“AI能做什么”,而是机器能否真正理解临床,像医生一样思考,然后自主行动?美的医疗旗下万东医疗在2026年春季CMEF…...

5分钟掌握艾尔登法环存档迁移工具:终极免费解决方案

5分钟掌握艾尔登法环存档迁移工具:终极免费解决方案 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 艾尔登法环存档迁移工具是一款专为《艾尔登法环》玩家设计的专业存档管理软件,能够…...

3分钟上手:用ArchivePasswordTestTool轻松找回遗忘的压缩包密码

3分钟上手:用ArchivePasswordTestTool轻松找回遗忘的压缩包密码 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经遇到…...

4.2《深入理解内存池(Memory Pool)与内存块(Memory Slab)设计与实现》

001、内存管理基础:从malloc/free到自定义内存管理器的必要性 一、从一次深夜调试说起 上周排查一个嵌入式设备偶发性死机问题,日志停在某行动态分配代码后消失。堆内存碎片化了——连续运行十几小时后,8MB的堆剩余总量还有3MB,但就是无法分配出一个连续的50KB缓冲区。设备…...

如何快速掌握LangGraph:构建智能工作流的5大秘诀

如何快速掌握LangGraph:构建智能工作流的5大秘诀 【免费下载链接】langgraph Build resilient language agents as graphs. 项目地址: https://gitcode.com/GitHub_Trending/la/langgraph LangGraph是一个强大的图网络框架,专门用于构建可编排、可…...

洞穴民宿的装修材料有哪些?

洞穴民宿的装修材料有哪些?在旅游市场不断发展的当下,洞穴民宿以其独特的风格和体验吸引着众多游客。那么,打造洞穴民宿需要用到哪些装修材料呢?天然石材天然石材是洞穴民宿装修的常用材料。如石灰岩、砂岩等,这些石材…...

【仅限首批200位架构师开放】:AI原生软件研发日志分析平台建设沙盘推演手册(含混沌工程注入模板+SLI/SLO反向推导表)

第一章:AI原生软件研发日志分析平台建设概览 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发日志分析平台并非传统日志系统的简单升级,而是以大模型理解能力为内核、以研发语义为驱动、以实时反馈闭环为目标的新型可观测基础设施。该平台…...

ObsPy的TauPyModel实战:如何为你的地震定位脚本快速集成P波理论走时计算?

ObsPy的TauPyModel实战:如何为你的地震定位脚本快速集成P波理论走时计算? 地震数据处理中,理论走时计算是定位震源和识别震相的基础环节。对于已经掌握基础地震分析的研究者和工程师而言,如何在现有脚本中高效集成可靠的理论走时计…...

51单片机项目省电实战:除了掉电模式,你的STC89C52还能这样‘偷懒’降功耗

51单片机低功耗设计实战:从电路优化到代码框架的全方位策略 在电池供电的物联网设备中,51单片机因其高性价比依然占据重要地位。但许多开发者在使用STC89C52这类经典型号时,往往只关注了手册中提到的掉电模式,却忽略了系统级功耗优…...

Block Copy 的内存布局详解掏

核心摘要:这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景,告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”,并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

duilib DPI 高分辨率 模糊问题及解决思路

1、问题 在客户机子上,出现了这么一个问题,就是反映duilib界面模糊,CEF也模糊 经排查,客户机子分辨率 3000以上,DPI采用了 300%,而我的程序没有专门适配DPI,而是采用的如下设置,让系统强制放缩的,因为他的机子DPI 300%,所以看起来放大了3倍,就看出模糊来了。 把这…...

Python3.8镜像实战:3步创建独立环境,复现实验结果不再难

Python3.8镜像实战:3步创建独立环境,复现实验结果不再难 1. 为什么需要Python独立环境 在Python开发中,我们经常会遇到这样的问题:昨天还能正常运行的项目,今天突然报错了;在A电脑上跑通的代码&#xff0…...

第6章 6.1.2 数据呈现的艺术:sprintf格式化操作符深度解析(MATLAB入门课程)

1. 为什么数据需要格式化呈现? 第一次处理实验数据时,我直接把MATLAB工作区的变量值复制到论文里,结果被导师狠狠批评了一顿。那些密密麻麻的数字堆在一起,小数点位数参差不齐,有些科学计数法显示,有些又是…...

Ubuntu 配置 Claude Code + MiniMax眯

先唠两句:参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜,它是菜单(资源路径)的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

移动端性能优化体系

移动端性能优化体系:打造极致用户体验 在移动互联网时代,用户对应用性能的要求越来越高。页面加载慢、卡顿、耗电等问题直接影响用户体验,甚至导致用户流失。构建一套完整的移动端性能优化体系至关重要。本文将从多个角度深入探讨移动端性能…...

新手必看:SiameseAOE中文观点抽取,三步搞定评论分析

新手必看:SiameseAOE中文观点抽取,三步搞定评论分析 1. 引言:为什么你需要一个“评论分析助手”? 想象一下,你刚上架了一款新产品,后台涌入了成百上千条用户评论。你迫切想知道用户对产品的真实看法&…...

OBS智能背景移除插件:无需绿幕的终极虚拟背景解决方案

OBS智能背景移除插件:无需绿幕的终极虚拟背景解决方案 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://…...

Dify二次开发实战:定制化LLM接入与认证改造指南

1. 为什么需要定制化LLM接入 在企业级大模型应用开发中,直接使用原生开源模型往往存在诸多限制。我去年参与过一个金融行业的智能客服项目,客户明确要求所有API调用必须经过三重认证。这就是为什么我们需要对Dify这类工具进行二次开发。 标准OpenAI接口协…...

【紧急预警】AI原生应用上线前必做通信压测:单连接承载>50路token流+多Agent状态同步时,这3类协议已证实失效

第一章:AI原生软件研发实时通信技术选型 2026奇点智能技术大会(https://ml-summit.org) AI原生软件对低延迟、高吞吐、语义感知的实时通信能力提出全新要求——模型推理流式响应、多模态协同状态同步、边缘-云协同训练反馈闭环等场景,已远超传统Web应用…...

为什么AI Agent需要多模态能力:视觉语音文本融合的架构设计原理

为什么AI Agent需要多模态能力:视觉语音文本融合的架构设计原理二、 摘要/引言 (Abstract/Introduction) 核心概念(本节前置) 在正式展开万字大论之前,我们先锚定全文两个最不可撼动、贯穿始终的前置核心概念——这两个词每天都在…...

深入浏览器渲染引擎:解析、布局、绘制与合成四阶段

深入浏览器渲染引擎:解析、布局、绘制与合成四阶段 当我们浏览网页时,浏览器如何将代码转化为屏幕上的像素?这一过程背后隐藏着复杂的渲染引擎工作机制。现代浏览器通过解析、布局、绘制与合成四个核心阶段,高效地将HTML、CSS和J…...

React Hook 状态同步陷阱分析

React Hook 状态同步陷阱分析 React Hook 自推出以来,极大地简化了函数组件的状态管理逻辑,但同时也带来了一些隐形的陷阱,尤其是在状态同步方面。许多开发者在初次使用useState、useEffect等Hook时,容易陷入异步更新、闭包依赖或…...