拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
-
SpringBoot项目集成Seata 2.0.0
【1】tx-service-group:事务组的主要作用是用于服务发现TC(事务协调器)服务集群,TC管理事务的提交或回滚。如果多个服务用同一个事务组可能会导致TC负载过高、事务管理混乱等问题。【4】必须在集成 seata 服务对应的数据库中创建 undo_log 表,【3】vgroup-mapping:注意事务组映射关系,不能配置错。【1】经测试验证,调用链全局事务可以正常回滚。被调用方正常开启分支事务(本地事务)即可。1、需要提供以下服务。【1】nacos服务。【2】seata服务。原创 2025-04-10 15:30:00 · 483 阅读 · 0 评论 -
SpringBoot配置上传文件临时解析处理目录、临时存储目录
spring.servlet.multipart.location 是 Spring Boot 中用于配置文件上传时临时存储目录的关键属性。它的作用是为 HTTP 多部分请求(文件上传)生成的临时文件指定存储路径。支持 multipart/form-data 类型的 HTTP 请求(例如表单文件上传),确保文件在写入临时目录后能被正确解析和处理。当客户端上传文件时,Spring 会先将文件内容写入磁盘的临时目录(而不是直接加载到内存),避免大文件占用过多内存。【1】确保应用对指定目录有读写权限。原创 2025-04-09 10:00:00 · 150 阅读 · 0 评论 -
集成 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 · 246 阅读 · 0 评论 -
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 · 274 阅读 · 0 评论 -
解决seata服务常见异常问题
【1】docker创建容器时,显示的分配内存即可 -e JVM_XMS=256m -e JVM_XMX=512m。一、错误信息,此问题可能会出现在docker或k8s部署seata服务时出现。【1】看日志信息,很明显无法分配内存。原创 2025-02-23 14:00:00 · 140 阅读 · 0 评论 -
SpringBoot项目中不启动(不添加) @EnableAspectJAutoProxy 注解,AOP功能还生效吗
1、@EnableAspectJAutoProxy 是Spring框架的一个注解,其主要作用是启用AspectJ的自动代理功能,告诉Spring容器,我们希望使用AspectJ的注解来定义切面,并希望Spring容器能够自动为这些切面目标创建代理对象。2、主启动类启动 @EnableAspectJAutoProxy 之后,项目启动时,会扫描所有标注了 @Aspect 的类,并注册到Spring容器中。2、主启动类不启动 @EnableAspectJAutoProxy。原创 2025-02-17 11:00:00 · 81 阅读 · 0 评论 -
Java21虚拟线程的概念和基本使用、以及和传统线程的对比
在 Java 21 中,虚拟线程作为一项全新的功能被引入,与传统线程相比,虚拟线程不仅在内存占用和创建开销上更为轻量,而且能更高效地支持 I/O 密集型应用,极大地提升并发处理能力。1、经验证,虚拟线程性能还是非常强的,但和 Spring 提供的 ThreadPoolTaskExecutor(AsyncTaskExecutor)线程池相比,虚拟线程还是稍逊一筹。首推还是使用虚拟线程,因为虚拟线程属于逻辑层面的线程,和物理机器无关,因此可以随时创建大量的线程也不会占用过多的内存和资源消耗。原创 2025-01-24 14:15:00 · 197 阅读 · 0 评论 -
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 · 124 阅读 · 0 评论 -
SpringBoot 3.x集成 jakarta mail 实现发送邮件
【2】发送者名称需要做转义处理,完整转义示例:String from = "\"" + senderName + "\"" + " " + "<" + senderEmail + ">";【1】mailAccount.setFrom():支持解析格式(双引号包裹名称 + 尖括号包裹地址):"\"发送者名称\" <support@example.com>"3、如上示例只验证了简单内容的邮件,也支持附件、HTML内容、抄送等邮件。MailConfig 类。MailUtil 工具类。验证结果:皆成功收到邮件。原创 2025-01-20 14:30:00 · 356 阅读 · 0 评论 -
解决:SpringBoot集成mail服务项目启动报错 Failed to instantiate [MailSenderValidatorAutoConfiguration]: Constructo
出于安全考虑,某云服务器默认封禁了TCP25端口出方向的访问流量,无法在某云上的云服务器通过TCP25端口连接外部地址。原创 2025-01-20 10:00:00 · 177 阅读 · 0 评论 -
SpringBoot提供的常用接口(拓展接口)示例
BeanPostProcess接口只在bean的初始化阶段进行扩展(注入spring上下文前后),而InstantiationAwareBeanPostProcessor接口在此基础上增加了3个方法,把可扩展的范围增加了实例化阶段和属性注入阶段。(2)使用场景,你可以在bean实例化之后,但还未初始化之前,拿到 BeanFactory,在这个时候可以对每个bean作特殊化的定制。(3)该类主要的扩展点有以下5个方法,主要在bean生命周期的两大阶段:初始化阶段和实例化阶段。1、此三者实现方式等效。原创 2024-12-22 03:58:57 · 144 阅读 · 0 评论 -
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 · 198 阅读 · 0 评论 -
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 · 131 阅读 · 0 评论 -
java中使用redis及redisson客户端实现轻量级消息队列、延迟消息队列
3、如果业务并发量较大,消息过多可能会导致内存占用过大从而影响 redis 的响应速度,毕竟 redis 的主功能是用作缓存的。2、只是需要把消息队列绑定到延迟队列上,然后生产者端通过延迟队列发送,延迟时间到了之后直接路由到绑定的消息队列中。4、不过还是建议使用专业的消息队列中间件,例如:RabbitMQ、RocketMQ、PulsarMQ 等。2、如果数据量不是特别大,对消息数据可靠性要求不高、允许消息容错的业务,可以使用此方案。1、已经集成了redis服务,这里服务端版本为:Redis 7.0.8。原创 2024-12-11 14:30:00 · 403 阅读 · 0 评论 -
解决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 · 353 阅读 · 0 评论 -
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 · 118 阅读 · 0 评论 -
解决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 · 449 阅读 · 0 评论 -
SpringBoot 3.x整合Redis集群(lettuce客户端),解决:DefaultClusterTopologyRefresh : Unable to connect to [10.0.4.
此问题是redis服务端集群配置有问题,连接不上,需要排查。默认为 redis 集群已经搭建好了。1、配置好以上信息后,启动如果报错,如下。3、配置Redis实例对象。原创 2024-12-05 10:30:00 · 560 阅读 · 0 评论 -
基于 Spring-Retry 自定义注解 @SpringRetry 实现接口调用异常重试
1、导入 spring-retry 依赖。2、定义注解 @SpringRetry。3、实现重试切面业务。原创 2024-12-02 10:30:00 · 180 阅读 · 0 评论 -
解决:Error parsing HTTP request header、Invalid character found in method name、names must be tokens
查阅了一些资料,说可能是请求头过大导致的问题,需要扩大其可传递请求头的大小。服务日志突然报这个问题。原创 2024-11-22 10:19:32 · 506 阅读 · 0 评论 -
解决xxl-job报错:EmbedHttpServerHandler : >>>>>>>>>>> xxl-job provider netty_http server caught exception
1、终极方案 - 关闭 EmbedServer 的日志打印。1、9999端口在lb上配置http协议。2、关闭lb心跳检查。3、自定义tcp协议。原创 2024-11-10 17:59:44 · 898 阅读 · 0 评论 -
Spring中的 InitializingBean、BeanPostProcessor、@PostConstruct 等初始化动作的执行时机分析,Bean的生命周期理解
2、初始化执行顺序优先级由高到低:BeanPostProcessor的预初始化方法 > @PostConstruct方法 > InitializingBean 的(afterPropertiesSet方法) > BeanPostProcessor的后初始化方法。1、相同点:InitializingBean 的(afterPropertiesSet方法)、BeanPostProcessor、@PostConstruct 都是在bean的属性注入完毕之后才执行,都可以用来进行bean的初始化动作。原创 2024-11-07 15:12:36 · 366 阅读 · 0 评论 -
SpringCloud微服务项目之间跨库联合查询简单的解决方案
4、如果被联合的表结构发生变化或者库服务地址等属性发生变化(必须符合快捷表的connection连接规则),对应的快捷表结构也要跟随变化或重新创建。(1)由于 db_hwy.t_one 表是 db_aly.t_one 表的快捷表,因此在 db_aly.t_one 表中添加数据即可。1、要实现跨库联合查询,前提是双方数据库服务都要开启(FEDERATED)联邦机制,才可以创建并使用快捷表。2、数据服务库:库(db_aly)、表(t_one)3、数据服务库:库(db_hwy)、表(t_one)原创 2024-10-30 14:30:00 · 444 阅读 · 0 评论 -
SpringBoot 3.x 集成 knife4j (Swagger3)
SpringBoot 3.x 开始将 javax 包改成了 jakarta ,而原swagger等包中依然使用的是javax,所以会报错,并且不支持OpenAPI 3标准,升级SpringBoot 3.x以后会有很多问题。访问地址:http://localhost:8080/doc.html。说明:Get对象类型传参方式,需要使用 @ParameterObject 标注。2、Post方式传参和原Swagger2传参方式一样,不需要特殊的标注。3、配置注解,与以往的Swagger注解用法有所不同。原创 2024-10-29 14:30:00 · 830 阅读 · 0 评论 -
springboot项目中使用 @Lazy 注解懒加载解决循环依赖问题,以及 @Lazy 标注顺序
1、示例中 taskServiceImpl 已注入到 groupServiceImpl 中,有循环依赖问题,说明二者业务类中有互相引用注入,你注入我、我注入你。2、此时可以找到被注入的业务类 groupServiceImpl 在此业务类中的 taskService 上标注 @Lazy 懒加载即可。如上示例就是循环依赖引起的报错,往往循环依赖报错只需排查最后一个 Caused by 就行。原创 2024-06-14 10:28:10 · 969 阅读 · 0 评论 -
Spring发布订阅机制,应用监听(ApplicationListener)事件(ApplicationEvent)的基本用法
在实际业务中,一些经常重复操作的动作可以交给spring的监听发布事件来处理,写好监听逻辑,需要操作库的时候只需要发布对应的事件即可。3、例如实际业务中对订单有任何变动操作的,需要记录订单变动日志的场景下,可以使用spring的事件监听记录订单变动日志信息。如果多个监听类监听同一个事件类,此时发布一个事件,多个监听类每个都会监听到该事件。一、创建业务事件Bean,并继承ApplicationEvent。1、有监听就有发布,有发布就有监听,相辅相成。2、监听类只能监听相对应泛型Bean的事件。原创 2024-03-01 14:30:00 · 402 阅读 · 1 评论 -
Java实现生成普通二维码(输出流和Base64)、小程序二维码(Base64)、获取小程序短链接
1、使用 Hutool QrCodeUtil 工具类生成普通二维码,关键代码。(2)请求微信api地址需要携带query参数 access_token。(2)请求微信api地址需要携带query参数 access_token。(1)成功获取到小程序二维码所需要的Base64码。(1)成功获取到小程序短链接。1、请求微信api示例代码。1、请求微信api示例代码。(2)Base64方式。原创 2024-01-03 14:00:00 · 1416 阅读 · 0 评论 -
解决swagger报:java.lang.IllegalStateException: Ambiguous models equality when conditions is empty
(2)解决(1)问题,需要把当前类中引用的当前dto类型属性和引用当前dto类的其他dto中对应的类型属性隐藏掉(@ApiModelProperty(value = "xxx", hidden = true))例如:aDto、bDto,aDto中引用aDto自己,bDto中也引用了aDto,就会出现出现本次所说的异常现象,此时把aDto中引用aDto自己这个属性隐藏掉,再把bDto中也引用的aDto属性隐藏掉即可。2、把循环引用的两个dto中swagger属性的文档标记为隐藏 hidden = true。原创 2023-12-21 12:12:21 · 1643 阅读 · 0 评论 -
SpringBoot项目中获取(下载)业务功能的导入数据模板文件
在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板。1、在项目的 resource 包下创建 template 目录专门用来存放模板文件。2、把模板文件放入此目录中。3、 编写下载模板接口代码。5、成功下载模板文件。原创 2023-11-18 23:57:44 · 844 阅读 · 0 评论 -
解决nacos客户端连接服务端报:Client not connected, current status:STARTING
降低客户端版本至 1.4.1 就Ok了。nacos服务端版本:v2.1.2。nacos客户端版本:2.1.2。原创 2023-11-18 04:13:22 · 3378 阅读 · 0 评论 -
Naocs配置中心配置映射List、Map、Map嵌套List等方式
【1】@ConfigurationProperties(prefix = "list-json-str") 其中 prefix 的 list-json-str 为配置内容的根节点属性。【2】示例代码中 listJsonStrList、cfTestMap、cfTestMapValForList 是配置类的映射属性。【3】示例代码中 ListByJsonStrDto:映射属性传输类dto,此 dto 内属性与配置内容中的节点属性一一映射。原创 2023-11-08 23:57:25 · 2288 阅读 · 0 评论 -
Java使用 MailUtil、JavaMailSender 实现发送邮件,QQ邮箱为例
2、在 resources 目录下创建配置文件 mail.setting。2、配置 bootstrap.yml 邮件服务属性。成功接收到包含附件的邮件。原创 2023-07-24 12:00:43 · 1398 阅读 · 0 评论 -
SpringRetry实现接口异常优雅重试机制
【4】backoff:重试策略,delay = 1000, multiplier = 2 延迟1秒(1000毫秒)进行第一次重试,后续每次延迟时间会以 multiplier 的倍数进行重试,示例为:1(1000毫秒)秒、2(1000*2)秒、4(2000*2)秒、8(4000*2)秒...以此类推进行重试。【4】如果一个实现类中有多个异常回调方法,在 @Retryable 中可以使用 recover 属性指定回调的方法名。从结果可以看出,符合重试策略的预期,重试5次后依然异常失败,进入失败回调方法结束。原创 2023-04-06 01:59:43 · 728 阅读 · 0 评论 -
Idea解决Service启动服务不显示端口号的问题
1、找到目录:C:\用户\你的用户名\AppData\Local\Temp\hsperfdata_你的用户名,把这个文件夹删了即可。服务启动成功后,但是端口号不显示。2、删除后,重启服务已显示。原创 2023-04-02 02:19:19 · 5254 阅读 · 6 评论 -
SpringBoot支持bootstrap.yml/bootstrap.properties配置文件,需要导入spring-cloud-starter-bootstrap依赖
2、spring cloud starter alibaba nacos config,引用这个配置中心的依赖后,需要使用bootstrap.yml或bootstrap.properties 作为中转配置文件。3、不同类型配置文件读取优先级:bootstrap.yml/bootstrap.properties > application.yml/application.properties。1、导入依赖后,还需要开启 spring.cloud.bootstrap.enabled=true。原创 2023-03-05 22:31:23 · 5976 阅读 · 4 评论 -
SpringBoot项目中控制线程池、多线程事务提交、回滚的方式
1、由于多线程每个线程都是一个异步任务,所以每个线程都是一个单独的事务,通常使用的声明式事务 @Transactional() 是无法控制多线程中事务的。成功写入10000条数据。插入数据过程中模拟出现异常,事务会全部回滚。此方式没有第一种方式可靠,推荐第一种方式。2、所以只能另寻解决方式。原创 2023-02-20 05:58:46 · 5500 阅读 · 8 评论 -
Java切面中各个方法对象、参数对象、反射以及注解的分析
【1】Annotation[][] parameterAnnotations = method.getParameterAnnotations(),返回的是个二维数组,第一维度包含切入方法的全部参数信息(索引顺序与method.getParameters()和point.getArgs()的顺序一致)、第二维度包含每个参数对应的注解信息。3、Java Aspect 中最重要、也是最常用的 @Around 环绕增强切入,其中切入点对象的方法 point.proceed() 为执行我们的业务方法。原创 2022-12-05 00:27:02 · 4966 阅读 · 0 评论 -
SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑
【1】因为 @SpringBootApplication 中已经包含 @ComponentScan 注解、并且用以扫描主启动类同级目录下的组件配置类,所以我们。1、@SpringBootApplication 是联合注解,包含了 @ComponentScan 会默认扫描主启动类同级包目录下所有的组件类、配置类。2、如果我们需要扫描主启动类同级以外的包目录怎么?【4】在主启动单独使用 @ComponentScans 的时候,不需要指明主启动类同级包目录,不会影响默认扫描主启动类同级包目录。原创 2022-11-30 15:36:36 · 4855 阅读 · 0 评论 -
SpringBoot利用Spring SPI机制实现自动按顺序加载注册JavaBean到容器中,以及@ImportAutoConfiguration的使用
1、SPI机制(Service Provider Interface),服务提供接口,主要是用来解耦,资源文件目录下的 \resources\META-INF\spring.factories 我们把它归纳为Spring为我们提供的SPI机制,通过这种机制,我们可以在不修改Spring源码的前提下,非常轻松地做到对Spring框架的扩展开发。2、我们都知道,SpringBoot只能扫描本体项目中的主启动类同级包下的所有组件类、及 spring.facotries 中的组件类,而扫描。原创 2022-11-28 14:29:28 · 1432 阅读 · 0 评论 -
SpringBoot集成XXL-Job启动报非法反射WARNING: An illegal reflective access operation has occurred
1、排除 xxl-job 中的 groovy 重新引入即可。xxl-job-core版本:2.3.1。1、是 groovy 依赖的版本导致。原创 2022-11-27 04:33:30 · 776 阅读 · 0 评论