自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 集成 shardingsphere-jdbc 常见问题

1、sharding.yml 文件中配置项要求非常严格,注意属性缩进、最好也不要出现汉字(包括注释汉字)、不能配置 shardingsphere-jdbc 不需要的额外其他属性。【2】actualDataNodes:把逻辑表映射到实际表命名规则。语法:数据源逻辑名_序号索引值.逻辑表名称_序号索引值,示例:ds_${0..1}.t_${0..1}【1】t:是逻辑表名称(一般取表前缀),逻辑表和实际表映射。【1】不配置此项加载单表,则会报错。2、违反1规则,可能会报错。

2025-03-29 14:30:00 19

原创 SpringBoot3.x 集成 shardingsphere-jdbc 实现读写分离

【1】jdbc:shardingsphere:classpath:是数据源配置文件路径的前置固定写法,后面sharding-config.yml是刚才创建的数据源配置文件目录和名称。3、打开 bootstrap.yml 文件,添加 ShardingSphereDriver 驱动,以及数据源配置文件的路径。1、在 resources 目录下创建 sharding-config.yml 文件,并添加配置信息。【2】读写库配置、负载均衡规则、分片配置逻辑表等。【3】不同数据源对应的url属性有所不同,说明。

2025-03-29 10:30:00 70

原创 docker部署安装Seata服务

该文件 application.yml 在 seata 项目的 seata\conf\application.yml 目录下,以及配置案例文件(application.example.yml)2、在nacos配置中心,创建 seata-server.properties 或 seata-server.yml 配置文件。【1】脚本可以在我们前面下载的seata项目包的 seata\script\server\db\mysql.sql 找到。【2】SEATA_IP:用于注册中心seata实例的ip。

2025-02-23 15:30:00 79

原创 解决seata服务常见异常问题

【1】docker创建容器时,显示的分配内存即可 -e JVM_XMS=256m -e JVM_XMX=512m。一、错误信息,此问题可能会出现在docker或k8s部署seata服务时出现。【1】看日志信息,很明显无法分配内存。

2025-02-23 14:00:00 75

原创 MySQL中ddl操作或创建索引防止锁表的一些建议或解决方案

【说明】目前没有任何一种办法可以保证在DDL操作下能完全避免锁表。(1)lock的可选项除了 none,还可以使用 shared(共享锁:允许读操作,但会阻塞写操作)【说明】使用 algorithm = inplace 原地算法,减少对数据库性能的影响。(2)在生产环境中对数据量较大的表进行DDL操作,选择在流量较小的时段执行较为合适。【说明】使用 lock = none 明确告诉MySQL在创建索引时不锁表。(1)建议在生产环境中进行任何重大DDL更改,都要在测试环境充分测试验证。

2025-02-17 15:00:00 345

原创 SpringBoot项目中不启动(不添加) @EnableAspectJAutoProxy 注解,AOP功能还生效吗

1、@EnableAspectJAutoProxy 是Spring框架的一个注解,其主要作用是启用AspectJ的自动代理功能,告诉Spring容器,我们希望使用AspectJ的注解来定义切面,并希望Spring容器能够自动为这些切面目标创建代理对象。2、主启动类启动 @EnableAspectJAutoProxy 之后,项目启动时,会扫描所有标注了 @Aspect 的类,并注册到Spring容器中。2、主启动类不启动 @EnableAspectJAutoProxy。

2025-02-17 11:00:00 57

原创 Java中 volatile、atomic、synchronized 关键字的作用

【2】指令重排序是指编译器和JVM为了提高程序执行效率而采用的一种优化手段,但在多线程环境中,它可能会导致程序出现意料之外的行为。【2】在多线程环境中,一个线程对共享变量的修改后如果需要及时地被其他线程看到最新的值。【1】原子性:atomic 类中的操作都是原子的,原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就会在不受其他线程干扰的情况下一直执行到结束。【2】atomic 原子性保证了在多线程环境下,即使多个线程同时尝试修改同一个 Atomic 对象的状态,也不会导致数据不一致的问题。

2025-02-11 15:00:00 40

原创 JMM(Java Memory Model)Java内存模型

1、Java内存模型(Java Memory Model,JMM)是Java虚拟机定义的内存访问规范,用于屏蔽底层硬件和操作系统的内存访问差异,达到内存访问一致性的目的。1、可见性:一个线程对共享变量的修改,能够及时地被其他线程看到。JMM通过规定主内存与工作内存之间的交互操作,使用 volatile 修饰共享变量确保变量的可见性。2、解决多线程环境下共享变量的可见性、原子性和有序性问题,规定了共享变量如何在多线程之间共享。【工作内存】:每个线程独有的一个存储区域,用于存储线程私有数据和共享变量的副本。

2025-02-11 10:30:00 150

原创 Java21虚拟线程的概念和基本使用、以及和传统线程的对比

在 Java 21 中,虚拟线程作为一项全新的功能被引入,与传统线程相比,虚拟线程不仅在内存占用和创建开销上更为轻量,而且能更高效地支持 I/O 密集型应用,极大地提升并发处理能力。1、经验证,虚拟线程性能还是非常强的,但和 Spring 提供的 ThreadPoolTaskExecutor(AsyncTaskExecutor)线程池相比,虚拟线程还是稍逊一筹。首推还是使用虚拟线程,因为虚拟线程属于逻辑层面的线程,和物理机器无关,因此可以随时创建大量的线程也不会占用过多的内存和资源消耗。

2025-01-24 14:15:00 182

原创 Spring AOP 和 AspectJ AOP 的区别和使用场景

如果你需要增强 final 方法、static 静态方法、字段访问、构造器调用等,或者需要在非 Spring 容器管理的对象上应用增强逻辑,AspectJ 是唯一的选择。(2)Spring AOP 是基于动态代理实现的增强,仅支持增强 Spring 容器内管理的 Bean 实例对象,不支持增强 final 和 staic 修饰的方法。1、AspectJ 是通过直接操作字节码来实现的增强,它不依赖于代理对象,能够直接对目标类的字节码进行修改。(3)AspectJ 可以增强非 Spring 容器管理的对象。

2025-01-24 10:15:00 107

原创 SpringBoot集成 jakarta mail 实现发送邮件

Jakarta Mail 的前身是JavaMail,JavaMail最后一个版本是于2018年8月发布,现已经停止更新。新项目应该使用 Jakarta Mail。3、如上示例只验证了简单内容的邮件,也支持附件、HTML内容、抄送等邮件。2、MailAccount 实例配置。验证结果:皆成功收到邮件。

2025-01-20 14:30:00 265

原创 解决:SpringBoot集成mail服务项目启动报错 Failed to instantiate [MailSenderValidatorAutoConfiguration]: Constructo

出于安全考虑,某云服务器默认封禁了TCP25端口出方向的访问流量,无法在某云上的云服务器通过TCP25端口连接外部地址。

2025-01-20 10:00:00 125

原创 搭建redis集群常见的问题及解决

(1)错误信息[ERR] Node is not empty表明您尝试创建Redis集群时,指定的节点不为空。这可能意味着该节点已经是另一个集群的一部分,或者它包含数据库0中的一些键。在确保服务是已启动的情况下,却连接不上,此时就可以排查是不是云服务器的端口开放问题,一般在云服务防火墙规则下放开允许端口号就可以了。(2)删除对应的 appendonlydir、dump.rdb、nodes-8005.conf 文件,重新创建集群即可。一、在集群节点启动后,客户端连接登录或创建集群的时候报如下错误。

2025-01-13 10:30:00 176

原创 解决idea中无法拖动tab标签页的问题

2、去掉勾选 Drag-and-drop with Alt pressed only 即可。1、按 Ctrl + Alt + S 打开设置,找到路径。

2025-01-10 14:30:00 544

原创 mysql实现对字符列第一个汉字首字母拼音进行A-Z顺序排序,使用gbk编码

在特殊场景中,需要对某列进行排序,预期是按照汉字拼音首字母进行排序,如果使用字段直接排序会发现不符合预期,那么需要做一些特殊处理。2、如果使用 conver() 执行时日志输出有报错,推荐使用 cast() 函数对第一个汉字编码类型转换为 gbk 后,再进行排序。1、使用 convert() 函数对第一个汉字编码类型转换为 gbk 后,再进行排序。从结果可以看出,符合预期排序。从结果可以看出,符合预期排序。从结果看,很明显不符合预期。

2025-01-10 10:30:00 415

原创 windows系统安装mysql,版本[8.3.0、9.0.1](压缩包方式)

(2)也可以指定 datadir=D:\xxx\xxx\data,datadir 为数据或日志文件存放目录地址。1、解压后,将安装目录下的bin添加至系统环境变量 PATH 路径中。(1)这里不需要指定 datadir=D:\xxx\xxx\data。1、切换目录至mysql主目录的bin文件夹下,执行cmd命令。1、默认密码是随机串不好记,登录mysql数据库修改密码。2、执行后输出信息,需要记录生成的默认 root 密码。2、修改,例如将密码修改为 root123。4、删除对应的安装目录文件。

2024-12-30 10:30:00 780

原创 windows(win)系统盘C盘(系统盘)爆满,优化方式

(1)完成如上操作,会释放C盘空间,提升电脑响应速度。1、打开控制面板,在右上角搜索框输入索引。2、点击索引选项,打开后选择高级按钮。3、点击重建,然后点击确认。

2024-12-29 14:30:00 297

原创 java中常用的初始化动作 static代码块、无参构造方法的区别

(2)只不过实例化Chil时除了本身的static块和无参构造方法会执行,其父类的也会执行,执行时序与规则一模一样。(1) 由结果可以看出,实例化对象,static代码块只会执行一次,无论实例化多少次,也只执行一次。3、static代码块在类加载时候执行,所以static代码块执行的优先级高于构造代码块。1、static代码块是在类加载时执行的,且只执行一次。(2)而无参构造方法,则跟随实例化次数,每实例化一次会跟随执行一次。2、而构造方法,则是跟随实例化次数,每实例化一次会跟随执行一次。

2024-12-29 10:30:00 51

原创 安装MySql服务集群,主从复制模式,MySql 8.x为例

主从复制是一种异步复制模式,允许将一个主数据库的数据复制到一个或多个从数据库,所有的写操作都在主数据库上执行,而从数据库主要用于读操作。2、Slave节点通过 I/O 线程读取 Master 节点中的 binlog 内容并写入到自己的中继日志(relay log)文件中。1、在大型互联网系统、高并发场景中,Mysql主从复制用于实现读写分离,可以有效减轻主库负载压力。2、锁定数据表并导出数据库,在配置从服务器之前,需要确保数据的一致性。1、在主服务登录 mysql ,创建复制专用用户,并赋予权限。

2024-12-29 03:50:28 346

原创 git在idea中操作频繁出现让输入token或用户密码,可以使用凭证助手(使用git命令时输入的用户密码即可) use credential helper

2、勾选 Use credential helper 即可。1、打开 idea 设置,找到 git 路径。

2024-12-28 14:30:00 897

原创 idea新版ui外观习惯设置

1、调出常用功能窗口,如 Project、Services、Git等。3、选择 Version、Git下面对应的操作即可。1、显示边栏功能快捷按钮,可以迅速在找到对应功能。2、选择 Right、点击 Add Action。将git的常用操作放在右上角,操作更方便快捷。1、选择 Customize TooBar。1、在底部栏目右键,选中对应要显示的即可。1、在ui顶部右键,选择。

2024-12-28 10:30:00 748

原创 java中线程 Thread.join() 的作用

2、一个线程使用join()方法、一个线程不使用join()方法,结果使用 join() 方法可以正确赋值主线程的变量,不使用 join() 方法无法正确赋值主线程变量。具体来说,当一个线程调用了另一个线程的join方法后,当前线程会暂停执行,直到被join的线程执行完毕。3、得出结论,thread.join() 方法具有等待作用,也就是主线程会等待调用join()方法的子线程执行完毕后,主线程才会继续执行。1、由结果可以看出,由两个子线程给父线程(主线程)中的name变量赋值。

2024-12-24 14:30:00 177

原创 Java中 switch case 验证、避坑指南

(2)但case到目标步骤后,如果该步骤代码块中没有 break 关键字,那么将会继续依次进入后续各个的case块,直到遇到break才会停止。(2)但case到目标步骤后,如果该步骤代码块中没有 break 关键字,那么将会继续依次进入后续各个的case块,直到遇到break才会停止。2、如果一定要使用 switch case 块,则务必在case代码块中加上 break,否则会对结果造成较大的差异,甚至造成错误的结果。(1)从结果可以看出,会直接case到符合条件的目标步骤。进入到default了。

2024-12-24 10:30:00 76

原创 SpringBoot提供的常用接口(拓展接口)示例

BeanPostProcess接口只在bean的初始化阶段进行扩展(注入spring上下文前后),而InstantiationAwareBeanPostProcessor接口在此基础上增加了3个方法,把可扩展的范围增加了实例化阶段和属性注入阶段。(2)使用场景,你可以在bean实例化之后,但还未初始化之前,拿到 BeanFactory,在这个时候可以对每个bean作特殊化的定制。(3)该类主要的扩展点有以下5个方法,主要在bean生命周期的两大阶段:初始化阶段和实例化阶段。1、此三者实现方式等效。

2024-12-22 03:58:57 134

原创 微服务openfeign配置重试机制

2、如上问题,有时候可能是网络速度、网路抖动等原因导致超时异常,并非程序本身错误,所以可以配置openfeign重试策略,从而增强调用的容错率。1、在实际开发中,通过feign调用其他服务,如果出现read-timeout超时、或调用出现异常。1、通用 openfeign 重试策略,配置示例。

2024-12-22 00:31:51 857

原创 openfeign调用服务api请求两次的问题

3、通过源码分析可见,在 BlockingLoadBalancedRetryPolicy 类的方法中 get 方式直接返回 true 允许重试。2、而被调用方发现 Get 方式请求如果调用超时失败, 那么会默认进行一次重试调用。1、在学习 openfeign 调用其他服务接口时候,明明只发起一次请求。1、Get请求方式会重试一次。2、Post请求方式不会。

2024-12-20 01:22:21 304

原创 SpringBoot中 @Import 和 @ImportAutoConfiguration 的区别是什么?

1、@ImportAutoConfiguration 和 @EnableAutoConfiguration 内部都依赖了 @Import 注解,都支持把各个依赖包的 resources 目录下 MATE-INFO 目录下的 spring.factories 文件中配置的自动配置类加载到Spring容器中。1、@Import 注解只能通过 value 属性值进行导入,由于 @Import 注解的value只接受 Class 类型,意味着所导入的类必须在当前模块或所依赖的下游模块中,灵活性有限制。

2024-12-12 14:30:00 162

原创 Spring中使用 BeanDefinitionRegistryPostProcessor、ImportBeanDefinitionRegi,自定义注册 Bean 以及改变 Bean 的实例化加载顺序

2、使用 BeanDefinitionRegistryPostProcessor 接口 + Spring容器初始化器接口(ApplicationContextInitializer) + /META-INFO/spring.factories 这种方式注册的Bean,优先级高于 @Component、@Configuration、@Bean、@Service 等扫描注解方式注册的bean。注意:这里自定义注册bean后,那么该bean类上标注的 @Component 注解需要去掉,否则会报错bean重复。

2024-12-12 10:30:00 123

原创 java中使用redis及redisson客户端实现轻量级消息队列、延迟消息队列

3、如果业务并发量较大,消息过多可能会导致内存占用过大从而影响 redis 的响应速度,毕竟 redis 的主功能是用作缓存的。2、只是需要把消息队列绑定到延迟队列上,然后生产者端通过延迟队列发送,延迟时间到了之后直接路由到绑定的消息队列中。4、不过还是建议使用专业的消息队列中间件,例如:RabbitMQ、RocketMQ、PulsarMQ 等。2、如果数据量不是特别大,对消息数据可靠性要求不高、允许消息容错的业务,可以使用此方案。1、已经集成了redis服务,这里服务端版本为:Redis 7.0.8。

2024-12-11 14:30:00 358

原创 解决redisson:Redis server response timeout (3000 ms) occured for command: (RPUSH) with params: [xxx]

2、消费者不建议使用 take() 方法,take()获取消息会中断。2、升级 redisson 版本至最新版本或接近最新版本。2、(主因)redisson 版本与Redis服务端不兼容。1、客户端长时间未使用,服务端会断开。

2024-12-11 10:00:00 263

原创 Spring中使用 @Configuration、@Component、@Bean 来配置Java Bean的特点说明

2、@Configuration 用于标注在类上面,标记此类是个配置类,类中可以配置多个 @Bean 对象,当然此配置类本身也是一个Bean实例。3、@Component 用于标注在类上面,标记此类是个配置类,类中可以配置多个 @Bean 对象,当然此配置类本身也是一个Bean实例。(1)在同一个配置类中,Bean类型、名称都相同,运行后,只会按顺序实例化第一个Bean。(2)在同一个配置类中,Bean类型相同、名称不同,运行后,不同名称的Bean都会实例化。三、使用 @Bean配置 Bean 实例。

2024-12-08 14:30:00 95

原创 @JacksonAnnotationsInside作用理解

这个例子中,@JsonField 注解被标记为 @JacksonAnnotationsInside,这意味着当它被应用到类、方法或字段上时,它的行为会被内联到那个元素上,就像直接在那个元素上使用了 @JsonSerialize 和 @JsonDeserialize 一样。@JacksonAnnotationsInside 是 Jackson 库中的一个注解,它用于指定某个注解会被内联应用到它所注解的类、方法或字段上。假设自定义个一个注解 @JsonField。

2024-12-08 10:00:00 177

原创 Java中final、static的理解与作用

3、static final 同时修饰变量,代表这个变量占用一块固定的内存空间,不可再赋值,如果没有初始值会报错。但该变量自身内部属性值是可以改变的。1、final 修饰类,当一个类被final修饰后,表示这个类不能被其他类继承。2、final 修饰变量,表示这个变量是恒定不变的,常用来标识初始化完成后不希望它的值被重新赋值的变量,2、static修饰变量,该变量位于方法区中,该变量可以直接通过类名.变量名直接调用,不需要实例化类。5、final 修饰方法,表示这个方法被锁定,不希望该方法被重写改变行为。

2024-12-07 14:30:00 157

原创 搭建Redis集群模式

(2)redis-cli -c -h -p:-c表示集群模式,指定ip地址和端口号,如://xxx/redis/src/redis-cli -c -h 127.0.0.1 -p 8001。2、哨兵节点接收 redisClient 客户端请求后,会监控redis服务的master主节点,如果master主节点挂掉哨兵则会选举某个slave从节点来担任master主节点服务。这里以redis 7.0.8 版本为例。8、(此步骤未经验证,慎用)自定义指定主节点,不使用 redis-cli 自动分配的主节点。

2024-12-07 10:30:00 190

原创 Redis过期删除(淘汰)策略概念和理解,以及key已过期内存未释放的处理方式

1、惰性删除是指客户端访问一个key的时候,redis会基于一个叫 expireIfNeeded() 函数选择异步会同步把该key删除。1、虽然redis的key过期不会立刻被删除,但不会影响客户端对该key的访问结果,会基于惰性删除(在访问时判断是否已过期)在 Redis 中key过期后,不一定会立刻被删除,主要是基于惰性删除、定期删除这两种方式,下面介绍一下这两种策略。2、由此可见,这意味着过期key的删除是在访问时候进行的,而不是在过期时立即被删掉的。

2024-12-06 14:30:00 476

原创 Linux系统 vim 编辑文件搜索关键字用法

输入 /test或?test 此时就会匹配 test 字符串,并且高亮显示。1、首先确保在normal模式下,按ESC后不在insert模式。/+字符串:按n匹配下一个目标,按N匹配上一个目标。+字符串:按n匹配上一个目标,按N匹配下一个目标。:%s/原字符串/目标字符串/g。

2024-12-06 05:05:42 1293

原创 解决redis连接:DefaultClusterTopologyRefresh : Unable to connect to [10.0.4.6/<unresolved>

2、检查服务端配置 cluster-announce-ip、cluster-announce-bus-port 参数,分别需要绑定公网ip和1800x端口号,这里的1800x端口号用于主从节点通信。1、检查服务端配置bind参数是否正确,bind ip,这里的ip地址要绑定 0.0.0.0。此错误是redis客户端无法连接集群各个节点。

2024-12-05 15:30:00 370

原创 SpringBoot 3.x整合Redis集群(lettuce客户端),解决:DefaultClusterTopologyRefresh : Unable to connect to [10.0.4.

此问题是redis服务端集群配置有问题,连接不上,需要排查。默认为 redis 集群已经搭建好了。1、配置好以上信息后,启动如果报错,如下。3、配置Redis实例对象。

2024-12-05 10:30:00 492

原创 Linux系统安装Redis(单机)

进入 redis 根目录,make编译一下(相当于java的javac)(1)修改配置文件内容 daemonize 改为 yes。(1)kill 进程号:kill -9 PID。出现此信息,说明redis已经安装成功。1、下载安装包,上传至相应目录下。3、安装 gcc 编译组件,编译。看到这些信息,说明make成功。5、安装,验证是否安装成功。8、停止 redis 服务。4、验证是否编译成功。

2024-12-04 14:30:00 283

原创 @Async配置默认线程池

1、创建配置类,实现 AsyncConfigurer 接口,重写 getAsyncExecutor() 方法即可。2、@Async 默认使用的线程池为 ThreadPoolTaskExecutor。1、@Async 常用于业务方法上,使该方法具有异步的能力。

2024-12-04 10:30:00 298

空空如也

空空如也

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

TA关注的人

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