前言本文参考若依源码,介绍了如何在SpringBoot项目中使用AOP和自定义注解实现MySQL主从数据库的动态切换,当从库故障时,能自动切换到主库,确保服务的高可用性。实现效果:如果服务器搭建的是一主多从多个mysql数据源,主服务器用来读。从服务器用来写。此时你在代码层面用注解指定了一个增删改方法到从数据源,但是碰巧此时从数据源失效了,那么就会自动的切换到其它服务器。为什么要切换数据源,有哪些
在 Spring Web 开发中,@RequestBody 是一个常见而又强大的注解。它能够帮助我们轻松地将 HTTP 请求体中的 JSON 数据转换为 Java 对象,从而减少了繁琐的手工解析操作。但看似简单的注解,背后却隐藏着一些坑点和细节。今天,我们将深入探讨 @RequestBody 的使用方法和最佳实践!一、@RequestBody 是什么?官方解释:@Re
项目开发中经常需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息。Spring为我们提供了异步执行任务调度的方式,提供TaskExecutor 、TaskScheduler 接口。SpringBoot中使用两个注解:@EnableScheduling、@Scheduled来简单实现定时任务。@Scheduled参数详解1. cron该参数接收一个cron表达式,cron表达式是
关于 MyBatis-Plus 和 @Transactional 注解的使用,有时候会被“坑”,报下面这个错误···Transaction rolled back because it has been marked as rollback-only这个错误说白了就是事务被回滚了,因为已经被标记为“只能回滚”。其实就是经典的嵌套事务问题。经典的嵌套事务问题在嵌套事务中,如果内层事务出了问题,它不能
将若依框架原有的验证码改为easy-captcha,在使用算术验证码进行减法计算时,可能会生成负数的结果,但我们并不希望它出现负数。方法一 重复生成验证码直到非负为止生成验证码时,如果得到负数的结果,就再重新生成,直到为正数为止。可利用继承,重写checkAlpha方法;方法二 重写alphas方法,当生成负数结果时将减号换成其它运算符生成验证码时,如果得到负数的结果,就将减号改成其它符号(如+号
byte[] 与 base64 互相转换的几种方式总结。1.方式一import java.io.UnsupportedEncodingException; import java.util.Base64; // byte[]转base64 String base64Str = Base64.getEncoder().encodeToString(byteArray); // base64转byt
加减乘除NumberUtil.add 针对数字类型做加法NumberUtil.sub 针对数字类型做减法NumberUtil.mul 针对数字类型做乘法NumberUtil.div 针对数字类型做除法,并提供重载方法用于规定除不尽的情况下保留小数位数和舍弃方式。以上四种运算都会将double转为BigDecimal后计算,解决float和double类型无法进行精确计算的问题。这些方法常用于商业计
“阅读这本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员。很好,IT行业需要更好的程序员!”——罗伯特·C. 马丁(Robert C. Martin)为什么要保持代码整洁?不整洁的代码随着时间的增加而增加时,生产力会随之降低。导致的结果就是:代码不易扩展或扩展容易引发其他问题程序崩溃加班增加公司成本(加人)甚至可能造成公司倒闭一图胜千言1.1 所以从一开始就要保持整洁所以在一开始就要
在日常开发中,合并冲突是再常见不过的事了,特别是多个开发者同时修改同一文件的不同部分时,Git 就会不知道该保留哪个版本,从而产生冲突。那么,如何高效地解决 Git 冲突呢?我来给大家捋一捋。1. 使用图形化工具(IDEA / Sourcetree)如果你不喜欢命令行的繁琐操作,图形化工具就是你的好朋友。像 IDEA 自带的 Git 工具或者 Sourcetree,都提供了非常直观的冲突解决界面。
空指针异常是出现频率比较高的bug,在出现空指针时,我们都是习惯性地加一个 !=null 的判断,这个bug就解决了。当代码中频繁出现 !=null 的判断时,我们就会很头疼,能不能高效、优雅地做这个判断?答案当然是可以的。第一步当我们要做 !=null 的判断时,请停顿一下,看一下我们要做判断的这个数据是什么类型?数据类型无非就是String字符串、Object/自定义对象、List集合、Arr
在日常工作中,经常会遇到需要将list集合进行拆分然后进行操作,比如像在tidb中一个事务默认最多5000条sql statement,或者mysql批量处理时候max_allowed_packet默认大小的限制,一般都需要去把对应数据的集合去拆分然后进行操作。1. 使用guavaLists.partitionList<Integer> list = Lists.newArrayLis
BeanUtils.copyProperties()是Apache Commons BeanUtils库中的一个方法,用于将一个对象的属性复制到另一个对象。这个方法在处理数据传输对象(DTO)、视图对象(VO)和实体对象(Entity)之间的数据传递时非常有用。示例代码以下是一个简单的示例,演示如何使用BeanUtils.copyProperties()方法:import org.apache.c
MyBatis-Plus,这可是一个能让我们开发更高效、代码更简洁的好工具。 如果你曾经和MyBatis打过交道,那你一定知道它是一款功能强大的 ORM 框架,但也有一些使用上的麻烦。 幸运的是,MyBatis-Plus的出现让这些麻烦都变得不值一提,就像是给了我们一把全新的钥匙,打开了性能和可维护性的“大门”。 今天就跟大家分享12个我觉得特别有用的MyBatis-Plus优化技巧,让你写出简洁
常见的几种如下:NullPointerException - 空指针引用异常ClassCastException - 类型强制转换异常。IllegalArgumentException - 传递非法参数异常。ArithmeticException - 算术运算异常ArrayStoreException - 向数组中存放与声明类型不兼容对象异常IndexOutOfBoundsException -
一、springboot自动配置原理1.在SpringBoot主启类上面添加的SpringBootApplication是一个复合(派生)注解,里面有很多很重要的注解,像@SpringBootConfiguration,他的作用是将SpringBoot主启动类标记为一个配置类, 2.@ComponetScan(默认扫描主启动类所在的包以及所在包的子包标识了注解的类,将他们注册到IOC容器中3.@E
运行springboot3项目报错:Invalid bean definition with name 'userMapper' defined in file..........先看看mybatisplus官方文档(注意这是springboot3的依赖)<dependency> <groupId>com.baomidou</groupId> &
Java多态应用一、父类引用可以指向子类对象方法名和参数列表必须与父类中被重写的方法完全相同。子类方法的访问修饰符不能比父类中被重写的方法的访问修饰符更严格(即不能降低访问级别)。子类方法不能抛出更多的检查型异常,或者抛出比父类被重写方法声明的更广泛的异常。如果父类方法被标记为final,则不能在子类中被重写。如果一个子类对象赋值给了一个父类引用,该父类引用将仅能访问父类中定义的方法。如果子类覆盖
介绍easy-trans是一款用于做数据翻译的代码辅助插件,利用mybatis plus/jpa/beetsql 等ORM框架的能力自动查表,让开发者可以快速的把id/字典码 翻译为前端需要展示的数据。1、适用场景1 我有一个id,但是我需要给客户展示他的title/name 但是我又不想自己手动做表关联查询2 我有一个字典码 sex 和 一个字典值0 我希望能翻译成 男 给客户展示。3
使用Redis实现订单超时自动关闭,一种常见的方式是利用Redis的键过期(key expiration)特性结合发布/订阅模式(Pub/Sub)。以下是具体步骤:准备Redis环境确保你的Spring Boot项目中加入了以下依赖:Spring Data RedisLettuce客户端(或Jedis,根据个人偏好选择)在pom.xml中添加依赖:<dependencies>
对于容器类的应用程序,我们肯定想到的是Podman和Docker。这两个是比较常用的容器化应用程序的工具,它们提供了类似的功能,但在架构和设计上有一些区别。第一、Podman和Docker概念特点Docker是一个开源的容器化平台,为用户提供了创建、打包、分发和运行应用程序的能力。Docker采用了客户端-服务器(C/S)架构,其中包括一个Docker守护进程作为服务器端,负责管理和运行容器。用户
简介:在Spring AOP(面向切面编程)中,注解@Before, @After, @Around等用于定义切面的通知(Advice),这些通知在执行目标方法时有着不同的执行顺序。了解这些顺序对于正确设计切面逻辑至关重要。在Spring AOP中,注解如@Before, @After, @Around等用于在目标方法执行的不同阶段执行额外的逻辑,这些注解的执行顺序对于理解AO
引言在Spring Boot应用中,读取配置是一项基础且重要的任务。Spring Boot提供了多种灵活的方式来读取配置,以满足不同场景下的需求。本文将详细介绍Spring Boot中读取配置的几种常用方法.1. 使用@Value注解@Value注解是最直接且常用的读取配置的方式。它可以将配置文件中的属性值注入到Spring管理的Bean的字段中。@Component public class M
1.前言 Java 的自动内存管理(也称为垃圾收集)是一项强大的功能,它使开发人员可以轻松编写代码,而不必担心释放内存。在许多其他编程语言中,开发人员负责手动分配和释放内存,如果操作不当,可能会导致错误和内存泄漏。借助 Java 的自动内存管理,Java 虚拟机 (JVM) 负责分配和释放内存,这大大简化了编写代码的过程。自动内存管理的主要优点之一是它有助于防止内存泄漏,当程序占用不再需要的内存时
1.引入最新Hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.29</version> </dependency>2.代码实现pac
1.方式一import java.io.UnsupportedEncodingException; import java.util.Base64; // byte[]转base64 String base64Str = Base64.getEncoder().encodeToString(byteArray); // base64转byte[] byte [] byteArray = Base6
// 报错代码 alipayClient.execute(request) AlipayTradeRefundResponse response = alipayClient.execute(request);java jdk 版本更换到1.8.0_161以上
延迟队列是指在队列中存储带有过期时间的数据,在过期时间到达时自动从队列中移除。延时队列的使用场景:订单超过15分钟未支付自动取消推送数据至第三方平台,如果失败重新入队推送,推送间隔时间随着失败次数增加而扩大。分布式情况下一个定时任务往队列内推,多个实例同时处理任务。Redisson实现的延迟队列是基于Redis的zset命令实现的,通过将数据存储到zset中,并设置过期时间作为score,通过定时
依赖引入<dependency> <groupId>com.github.binarywang</groupId> <artifactId>weinxin-java-pay</artifactId> <version>对应的版本号</version> </dependency>证书申请和下载
@ApiImplicitParam作用在方法上,表示单独的请求参数参数name:参数名。value:参数的具体意义,作用。required:参数是否必填。dataType:参数的数据类型。paramType:查询参数类型,这里有几种形式:类型 作用path 以地址的形式提交数据query 直接跟参数完成自动映射赋值body 以流的形式提交 仅支持POSTheader&
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号