使用注解实现日志异步记录-踩坑
在开发系统日志功能时,我尝试使用 Spring AOP + 自定义注解实现异步日志记录,却发现切面里调用 @Async 异步方法并没有生效。 这篇文章记录了我的踩坑经历和解决方案,方便自己复盘 1.技术背景 在构建日志系统时,我希望实现以下目标: 对标注了自定义注解的方法进行操作日志记录; 在主业务发生事务回滚时,仍能保证日志数据成功写入数据库; 异步写入日志,提高系统性能并避免阻塞主业务线程; 提供可维护、高性能的日志方案。 设计思路: 定义自定义注解 @OperateLogAnnotation; 使用 Spring AOP 在切面中拦截注解方法; 将日志异步写入数据库。 2.日志记录实现方式 日志记录通常放在 finally 块中,确保无论方法正常返回还是抛异常,日志都会被记录。 OperateLogLogDemoControllerDemoServiceImplLogAspectAsyncConfigAsyncConfig1234567891011121314@Data@NoArgsConstructor@AllArgsConstructorpublic...
Elasticsearch高级
感谢黑马程序员的相关课程,课程地址如下: 黑马程序员SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 在昨天的学习中,我们已经导入了大量数据到elasticsearch中,实现了商品数据的存储。不过查询商品数据时依然采用的是根据id查询,而非模糊搜索。 所以今天,我们来研究下elasticsearch的数据搜索功能。Elasticsearch提供了基于JSON的DSL(Domain Specific Language)语句来定义查询条件,其JavaAPI就是在组织DSL条件。 因此,我们先学习DSL的查询语法,然后再基于DSL来对照学习JavaAPI,就会事半功倍。 1.DSL查询 Elasticsearch的查询可以分为两大类: 叶子查询(Leaf query clauses):一般是在特定的字段里查询特定值,属于简单查询,很少单独使用。 复合查询(Compound query clauses):以逻辑方式组合多个叶子查询或者更改叶子查询的行为方式。 ...
Elasticsearch基础
感谢黑马程序员的相关课程,课程地址如下: 黑马程序员SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 要达成下列学习目标: 理解倒排索引原理 会使用IK分词器 理解索引库Mapping映射的属性含义 能创建索引库及映射 能实现文档的CRUD 1.初识elasticsearch Elasticsearch的官方网站如下: https://www.elastic.co/cn/elasticsearch/ 本章我们一起来初步了解一下Elasticsearch的基本原理和一些基础概念。 ...
MQ高级
感谢黑马程序员的相关课程,课程地址如下: 黑马程序员SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 在昨天的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。 但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单状态却显示未支付,数据出现了不一致。 此时前端发送请求查询支付状态时,肯定是查询交易服务状态,会发现业务订单未支付,而用户自己知道已经支付成功,这就导致用户体验不一致。 因此,这里我们必须尽可能确保MQ消息的可靠性,即:消息应该至少被消费者处理1次 那么问题来了: 我们该如何确保MQ消息的可靠性? 如果真的发送失败,有没有其它的兜底方案? 这些问题,在今天的学习中都会找到答案。 ...
MQ基础
...
服务保护和分布式事务
感谢黑马程序员的相关课程,课程地址如下: 黑马程序员SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 在微服务远程调用的过程中,还存在几个问题需要解决。 首先是业务健壮性问题: 例如在之前的查询购物车列表业务中,购物车服务需要查询最新的商品信息,与购物车数据做对比,提醒用户。大家设想一下,如果商品服务查询时发生故障,查询购物车列表在调用商品服...
Docker
最近学习了 Docker,感觉它在软件部署上真的省了不少力气。之前在 Linux 上部署项目,尤其是 MySQL 这种软件,总是要自己找安装包、配置环境,步骤繁琐又容易出错。Docker 的出现,让这些问题变得简单很多:只要一条命令,就可以下载镜像、创建容器、运行软件,而且不需要关心操作系统环境。即便对Linux不熟悉,你也能轻松部署各种常见软件、Java项目。 感谢黑马程序员的相关课程,课程地址如下: 黑马程序员SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 本文主要内容:: 利用 Docker 部署常见软件 利用 Docker 打包并部署 Java 应用 理解 Docker 数据卷的作用 能看懂 Docker Compose 文件 1.快速入门 要想让Docker帮我们安装和部署软件,肯定要保证你的机器上有Docker. 可以使用VMware虚拟机安装,或者买阿里云99/年的云服务器。 ...
MybatisPlus
在学习 MyBatis Plus 的过程中,我参考了黑马程序员的相关课程。 课程地址如下: 黑马程序员SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等) 本文主要内容: 使用 MyBatis Plus 完成基础 CRUD 使用条件构造器编写查询与更新 Mybatis Plus的“伪”批量插入 常用注解的应用 处理枚举、JSON 类型字段 分页功能的使用 1.快速入门 为了让后续的示例更好跑起来,我先准备了一个小项目和几张表。整体流程非常简单,就是把环境搭好,然后开始用 MP 写 CRUD。 1.1.环境准备 首先,复制课前资料提供好的一个项目到你的工作空间(不要包含空格和特殊字符): 然后用你的IDEA工具打开,项目结构如下: 里面已经包含了一个 User 实体类、对应的 UserMapper 以及最基本的 Spring Boot 项目结构,拿来跑 MP...






