自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JSON字符串中获取一个指定字段的值

需使用自己写的测试类名。

2024-07-04 16:38:05 448

原创 java导出Excel文件

版本建议4.1.2及以上。由于poi高版本对低版本并不兼容,所以可能会出现低版本中的某些类,在升级后的高版本中找不到,所以低版本升级时,需考虑对系统的影响面。

2024-07-04 15:49:17 408

原创 mysql中字符串截取与拆分

参数str:被截取的字符串,pos从第几位开始截取,当为正数时从左开始数,当为负数时,从右开始数,从第几位开始截取,向右截取length个字符。参数str:被截取的字符串,pos从第几位开始截取,当为正数时从左开始数,当为负数时,从右开始数,从第几位开始截取,直至字符串结束;参数count:第几个分隔符,为正数时,截取从左往右第几个分隔符左边的内容,为负数时,截取从右往左第几个分隔符右边的内容。从左边截取字符串,参数str:被截取的字符串,length:截取的长度。参数str:被截取的字符串;

2024-07-02 14:40:07 427

原创 异常实践3

否则,你将会丢失堆栈跟踪和原始异常的消息,这将会使分析导致异常的异常事件变得困难。建立一个异常对象,是建立一个普通Object耗时的约20倍(实际上差距会比这个数字更大一些,因为循环也占用了时间,追求精确的读者可以再测一下空循环的耗时然后在对比前减掉这部分),而抛出、接住一个异常对象,所花费时间大约是建立异常对象的4倍。不应该使用异常控制应用的执行流程,例如,本应该使用if语句进行条件判断的情况下,你却使用异常处理,这是非常不好的习惯,会严重影响应用的性能。说用异常慢,首先来看看异常慢在哪里?

2024-07-01 17:50:03 353

原创 异常实践2

同时,在抛出MyBusinessException 异常时,需要尽可能精确地描述问题和相关信息,这样无论是打印到日志中还是在监控工具中,都能够更容易被人阅读,从而可以更好地定位具体错误信息、错误的严重程度等。但现实是经常会出现无法预料的异常,或者无法确定这里的代码未来是不是会改动(删除了阻止异常抛出的代码),而此时由于异常被捕获,使得无法拿到足够的错误信息来定位问题。当你尝试首先捕获较不具体的异常时,它们会报告无法访问的代码块。总是优先捕获最具体的异常类,并将不太具体的 catch 块添加到列表的末尾。

2024-07-01 09:51:10 467

原创 异常实践1

例如,考虑纸牌对象的情形,假设有一个用于发牌操作的方法,它的参数(handSize)是发一手牌的纸牌张数。虽然它们是Java平台库迄今为止最常被重用的异常,但是,在许可的条件下,其它的异常也可以被重用。如果一个异常满足你的需要,则不要犹豫,使用就可以,不过你一定要确保抛出异常的条件与该异常的文档中描述的条件一致。但是,使用 try 代码块是有原因的,一般调用一个或多个可能抛出异常的方法,而且,你自己也可能会抛出一个异常,这意味着代码可能不会执行到 try 代码块的最后部分。结果就是,你并没有关闭资源。

2024-06-29 17:40:09 653

原创 MySQL in 太多出现慢的原因

在MySQL中有一个配置参数,它的作用是一个等值查询(比如:in 查询),其等值条件数小于该配置参数,则查询成本分析使用扫描索引树的方式分析,如果大于等于该配置参数,则使用索引统计的方式分析。使用扫描索引树的方式分析在MySQL内部叫做,使用索引统计的方式分析在MySQL内部叫做。默认值是 200 .

2024-06-29 17:29:27 337

原创 java异常基础

try、catch和finally都不能单独使用,只能是try-catch、try-finally或者try-catch-finally。try语句块监控代码,出现异常就停止执行下面的代码,然后将异常移交给catch语句块来处理。finally语句块中的代码一定会被执行,常用于回收资源。throws:声明一个异常,告知方法调用者。throw :抛出一个异常,至于该异常被捕获还是继续抛出都与它无关。Java编程思想书中,对异常的总结。在恰当的级别处理问题。

2024-06-28 18:00:29 1118

原创 Docker Desktop安装mysql

拉取 MySQL 镜像完成后,执行如下命令,即可在本地镜像列表中看到下载好的。这里小哈使用的 Navicat, 输入主机、端口、用户名、密码后,点击。Docker 安装成功后,我们来通过它安装 MySQL 5.7。可以看到列表中有个 MySQL 5.7 的容器正在运行了。打开 Docker Desktop 可查看到刚刚的。注意:你可能会弹出如下图所示的警告,告诉你。,则表示 MySQL 数据库安装成功啦~

2024-06-28 10:17:26 846 1

原创 p6spy 组件打印完整的 SQL 语句、执行耗时

我们来配置一下 Mybatis Plus 打印 SQL 功能(包括执行耗时),一方面可以了解到每个操作都具体执行的什么 SQL 语句, 另一方面通过打印执行耗时,也可以提前发现一些慢 SQL,提前做好优化, 省得 DBA 公开处刑。注意,生产环境不推荐打印执行 SQL,会有数据泄漏风险,仅推荐本地开发使用。TIP : 此种方式为官方推荐,通过p6spy组件来实现完整的 SQL 打印。请使用 Mybatis Plus 3.1.0 以上版本。

2024-06-27 16:57:11 1130

原创 整合 Mybatis Plus

MyBatis Plus (简称 MP) 是一款持久层框架,说白话就是一款操作数据库的框架。它是一个 MyBatis 的增强工具,就像 iPhone手机一般都有个 plus 版本一样,它在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis Plus 的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。

2024-06-25 11:28:44 791

原创 自定义 Jackson 序列化、反序列化,支持 Java 8 日期新特性

由于 Spring Boot 内置使用的就是JacksonJSON 框架,所以,无需引入新的依赖,仅需添加自定义配置类即可,让其支持新的日期API。在公共 模块中,新建config配置包,并创建/*** @author: 闫小生* @description: 自定义 Jackson**/@Bean// 初始化一个 ObjectMapper 对象,用于自定义 Jackson 的行为。

2024-06-25 11:16:28 546

原创 java 进程 端口被占用

3.找到端口被占用的进程 TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7700。开发过程中出现这种问题,直接 ctrl +shift + esc 打开任务管理器,杀死所有 Java 进程,然后重启你的项目即可。1.win+r---->输入cdm ---->打开终端。2.输入netstat -ano t与-之间有空格。6.找到PID为7700的进程,右键,结束任务。5.进程-->名称,点击右键,选择PID。

2024-06-24 18:06:10 260

原创 如何理解泛型的编译期检查

因为类型检查就是编译时完成的,new ArrayList()只是在内存中开辟了一个存储空间,可以存储任何类型对象,而真正涉及类型检查的是它的引用,因为我们是使用它引用list1来调用它的方法,比如说调用add方法,所以list1引用能完成泛型类型的检查。在上面的程序中,使用add方法添加一个整型,在IDE中,直接会报错,说明这就是在编译之前的检查,因为如果是在编译之后检查,类型擦除后,原始类型为Object,是应该允许任意引用类型添加的。我们使用了泛型,到头来,还是要自己强转,违背了泛型设计的初衷。

2024-06-24 10:58:42 265

原创 整合 Knife4j:提升接口调试效率

其实,我们主要想用的是它的在线调试功能,在前面小节中,小哈在调试接口这块,都是通过 Postman 来进行的,每当测试一个新的接口时,就不得不手动填写请求路径,组装 JSON 入参格式,其实还是比较繁琐的。为了解决这个问题,Swagger 提供了相关的注解,可以标识模块名称,以及接口名称,并方便的展示在管理界面中。痛点:目前在左侧显示的模块类名,以及接口名称都是代码中本身的英文,也许你当前调试中,能够清晰的知道哪个。类、哪个接口都是干啥的,但是时间一长,接口多了起来,你就会一脸懵逼了,挨,这个。

2024-06-23 21:06:10 1543

原创 全局异常处理器+参数校验(最佳实践)

可以看到,返参明确返回了哪些字段校验不通过、当前值、以及注解中填写的提示信息,这样返回的好处是,当和前端联调接口时,前端小伙伴可根据提示信息就知道哪个字段出现了问题,避免扯皮。层手动获取校验错误,然后再返回参数,一坨一坨的,每次都要手动写未免太难看了。为了解放双手,我们可以通过全局异常处理器来捕获该异常,统一返回错误信息,改造。对象,从而获取到具体哪些字段校验不通过,最终组合错误信息并返回。在参数校验不通过时,会抛出具体什么异常,需要将。类型的异常,并从异常实体类中获取了。上述代码中,我们通过。

2024-06-23 21:05:42 315

原创 Spring Boot 实现全局异常管理

在开发大型 Web 应用时,统一的异常处理是保持代码整洁和维护性的关键所在。Spring Boot 提供了方便的方法来帮助我们实现全局的异常管理。带着大家学习如何在 Spring Boot 中实现全局的异常处理。在企业级应用中,除了系统异常,很多时候我们还需要处理业务异常。与系统异常不同,业务异常通常表示一个预期的、合理的错误,例如用户输入的数据无效、所请求的资源不存在等。我们需要区分这些异常,并为它们给调用者提供友好的错误提示。

2024-06-22 10:09:07 886 1

原创 Spring Boot 自定义响应工具类

在开发 RESTful API 时,为了保持响应结构的一致性,公司内部一般都有标准化的响应格式。这不仅可以提高代码的可维护性,还可以帮助前端开发者更容易地处理和解析 API 响应。将展示如何在 Spring Boot 中创建一个自定义响应参数工具类,然后使用它进行返参给前端。

2024-06-22 09:11:51 474

原创 Spring Boot 实现优雅的参数校验

在日常的 Web 开发中,请求参数校验是一个非常基础且重要的环节。通过校验,我们可以确保每次接口请求中,入参的数据是有效、安全且合规的,避免数据库中出现脏数据。

2024-06-21 14:22:37 1201

原创 Spring Boot 通过 MDC 实现日志跟踪

MDC(Mapped Diagnostic Context)是 SLF4J 和 log4j 等日志框架提供的一种方案,它允许开发者将一些特定的数据(如用户ID、请求ID等)存储到当前线程的上下文中,使得这些数据可以在日志消息中使用。这对于跟踪多线程或高并发应用中的单个请求非常有用。在高并发环境中,由于多个请求可能同时处理,日志消息可能会交错在一起。使用MDC,我们可以为每个请求分配一个唯一的标识,并将该标识添加到每条日志消息中,从而方便地区分和跟踪每个请求的日志。

2024-06-21 14:21:17 322

原创 Spring Boot 自定义注解,实现 API 请求日志切面

Java 注解是从 Java 5 开始引入的,它为我们提供了一种元编程的方法,允许我们在不改变代码逻辑的情况下为代码添加元数据。这些元数据可以在编译时或运行时通过反射被访问。自定义注解就是用户定义的,用于为代码提供元数据的注解。例如,本小节中自定义的注解,它用来表示一个方法在执行时需要被记录日志。AOP(Aspect-Oriented Programming,面向切面编程)是一个编程范式,它提供了一种能力,让开发者能够模块化跨多个对象的横切关注点(例如日志、事务管理、安全等)。

2024-06-20 09:22:48 804

原创 Spring Boot 整合 Logback 日志

Logback 是日志框架 SLF4J 的一个实现,它被设计用来替代log4j。Logback 提供了更高的性能,更丰富的日志功能和更好的配置选项。

2024-06-19 16:41:17 1068

空空如也

空空如也

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

TA关注的人

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