SpringBoot整合RabbitMQ实现邮件异步发送(修正版)

在之前的文章中,我们详细介绍了 SpringBoot 整合 mail 实现各类邮件的自动推送服务。
但是这类服务通常不稳定,当出现网络抖动的时候,会导致邮件自动…

JAVA:集成 Drools 业务规则引擎的技术指南

1、简述
Drools 是一个强大的业务规则引擎,适用于需要动态决策或规则管理的场景。它允许开发人员将业务逻辑与应用代码分离,使得业务人员可以通过规则文件维护和…

SpringBoot 整合 Mybatis 实现数据表增删改查,保姆级教程!

01、背景介绍
在上一篇文章中,我们介绍了利用 Spring Boot JPA 来实现对数据库的访问操作,虽然它在国外广泛流行,但是在国内流行程度远不如 My…

SpringBoot 整合 JPA 轻松搞定数据表增删改查!

01、背景介绍
在之前的文章中,我们介绍了通过JdbcTemplate来实现数据库的访问和读写操作。当有一定的开发经验之后,你会发现所有涉及到数据库操作的代码…

推荐几款实用的 GC 日志可视化分析工具!

01、背景介绍
通常情况下,运维人员并不会直接在服务器端通过命令方式实时打印当前应用程序的 GC 日志来分析服务的性能,通常的做法是导出当前服务的 GC 日志…

SpringBoot 开发 Web 系统,快速入门指南!

01、背景介绍
在之前的文章中,我们简单的介绍了 SpringBoot 项目的创建过程,了解了 Spring Boot 开箱即用的特性,本篇文章接着上篇的内容…

一小时徒手从0到1搭建一套图片文字识别的OCR平台

在我们日常的工作学习中,图片中的文件识别功能是非常常用的(如用户上传的图片做风控)。我们根据面向的对象不同,一般可以分成两类:
(1)面向普通用户;现有的图片文…

Docker,开发人员必会的工具之一

在日常开发中,很多公司的微服务应用或一些常见的中间件都采用通过docker来部署的,今天我们来聊聊docker的那些事。
1、认识docker
docker可以…

实现大文件的断点下载、分片下载

大文件下载是我们开发中经常可以遇到的业务场景,如果直接将大文件(如一部高清的电影可能有5G)装载到内存中的方式下载,如下所示:

如果内存只有4G内存,此时资源…

线上Java应用导致CPU占用率过高的排查和解决方案

在我们日常开发中,如果Java程序在运行中占用大量的CPU资源,此时就会导致系统性能急剧下降、系统的响应变慢甚至会导致系统由于大量请求打过来而承受不住进而崩溃。…

如何使用Spring状态机优雅的管理复杂流程之间的状态变更

在我们的实际项目中经常会遇到一些多流程之间的状态变更问题,典型如订单状态的变更,如下所示的是事件与订单的状态变更的关系图:

每当触发一个事件之后订单的状态就发…

大文件秒传、断点续传和分片上传

在日常业务中经常会遇到上传大文件的需求(如上传一部3G大小的高清电影资源),如果大文件资源上传不做特殊处理而直接使用小文件上传的方式上传到服务,可能会出现如网络…

Java对象都是堆上分配?看完Java中对象逃逸分析就知道答案了

随着JIT编译期的发展与逃逸分析技术逐渐成熟,所有的对象都分配到堆上也渐渐变得不是一定的。在编译期间JIT会对代码做很多优化,其中有一部分优化是减少内存堆分配压…

3分钟理清Java对象头里面的那些杂事

对象头是一个对象用于保存自身状态的区域,在HotSpot虚拟机中,对象在堆内存中存储的布局可以划分为三个部分:对象头(Header)、实例数据(Instance…

从运行的角度理解Java反射的原理

通过Java的发射机制可以实现一些高级的功能,比如动态生成代理对象、动态生成类、动态配置对象等。在Java的一些框架(如Spring框架)也广泛应用了发射机制,…

ThreadLocal的那些杂事

我们都知道多个线程需要对一个共享变量进行修改操作的时候容易出现数据安全问题,如下如所示线程操作共享变量的图:

为了保证线程安全,一般使用者在访问共享变量的时候…

整理常见的实时消息推送方案

消息推送在我们的日常生活中很常见,如大促销售额实时大屏数据展示、网站未读消息提示、游戏中技能释放、B站上浏览视频评论时如果出现最新评论会立马弹出来,这些都是实时…

线上JVM OOM问题,如何排查和解决?

JVM(Java虚拟机)中的内存不足错误(Out of Memory Error, OOM)是许多Java开发者在生产环境中遇到的常见问题。这个问题可能出现在不…

Java 日志组件@Slf4j 介绍及配置详解

1 基本介绍
每一个Java程序员都知道日志对于任何一个Java应用程序尤其是服务端程序是至关重要的,而很多程序员也已经熟悉各种不同的日志库,如java.uti…

一文带你彻底弄懂线程池设计机制

01、背景介绍
虽然 Java 对线程的创建、中断、等待、通知、销毁、同步等功能提供了很多的支持,但是从操作系统角度来说,频繁的创建线程和销毁线程,其实是需要…