拄杖忙学轻声码
希望学习的同时也能和大家交流分享技术
展开
-
springboot项目中使用 @Lazy 注解懒加载解决循环依赖问题,以及 @Lazy 标注顺序
1、示例中 taskServiceImpl 已注入到 groupServiceImpl 中,有循环依赖问题,说明二者业务类中有互相引用注入,你注入我、我注入你。2、此时可以找到被注入的业务类 groupServiceImpl 在此业务类中的 taskService 上标注 @Lazy 懒加载即可。如上示例就是循环依赖引起的报错,往往循环依赖报错只需排查最后一个 Caused by 就行。原创 2024-06-14 10:28:10 · 357 阅读 · 0 评论 -
Spring发布订阅机制,应用监听(ApplicationListener)事件(ApplicationEvent)的基本用法
在实际业务中,一些经常重复操作的动作可以交给spring的监听发布事件来处理,写好监听逻辑,需要操作库的时候只需要发布对应的事件即可。3、例如实际业务中对订单有任何变动操作的,需要记录订单变动日志的场景下,可以使用spring的事件监听记录订单变动日志信息。如果多个监听类监听同一个事件类,此时发布一个事件,多个监听类每个都会监听到该事件。一、创建业务事件Bean,并继承ApplicationEvent。1、有监听就有发布,有发布就有监听,相辅相成。2、监听类只能监听相对应泛型Bean的事件。原创 2024-03-01 14:30:00 · 235 阅读 · 1 评论 -
Java切面中各个方法对象、参数对象、反射以及注解的分析
【1】Annotation[][] parameterAnnotations = method.getParameterAnnotations(),返回的是个二维数组,第一维度包含切入方法的全部参数信息(索引顺序与method.getParameters()和point.getArgs()的顺序一致)、第二维度包含每个参数对应的注解信息。3、Java Aspect 中最重要、也是最常用的 @Around 环绕增强切入,其中切入点对象的方法 point.proceed() 为执行我们的业务方法。原创 2022-12-05 00:27:02 · 4748 阅读 · 0 评论 -
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 · 1230 阅读 · 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 · 1084 阅读 · 0 评论 -
SpringBoot项目中获取(下载)业务功能的导入数据模板文件
在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板。1、在项目的 resource 包下创建 template 目录专门用来存放模板文件。2、把模板文件放入此目录中。3、 编写下载模板接口代码。5、成功下载模板文件。原创 2023-11-18 23:57:44 · 696 阅读 · 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 · 826 阅读 · 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 · 1344 阅读 · 0 评论 -
SpringBoot项目中控制线程池、多线程事务提交、回滚的方式
1、由于多线程每个线程都是一个异步任务,所以每个线程都是一个单独的事务,通常使用的声明式事务 @Transactional() 是无法控制多线程中事务的。成功写入10000条数据。插入数据过程中模拟出现异常,事务会全部回滚。此方式没有第一种方式可靠,推荐第一种方式。2、所以只能另寻解决方式。原创 2023-02-20 05:58:46 · 4948 阅读 · 8 评论 -
Java使用 MailUtil、JavaMailSender 实现发送邮件,QQ邮箱为例
2、在 resources 目录下创建配置文件 mail.setting。2、配置 bootstrap.yml 邮件服务属性。成功接收到包含附件的邮件。原创 2023-07-24 12:00:43 · 1151 阅读 · 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 · 623 阅读 · 0 评论 -
Idea解决Service启动服务不显示端口号的问题
1、找到目录:C:\用户\你的用户名\AppData\Local\Temp\hsperfdata_你的用户名,把这个文件夹删了即可。服务启动成功后,但是端口号不显示。2、删除后,重启服务已显示。原创 2023-04-02 02:19:19 · 3387 阅读 · 6 评论 -
java: 找不到符号 符号: 类 xxx
把被调用的模块安装到本地仓库,重新构建就解决了。模块之间引用类或者属性,报的此异常。原创 2021-08-19 17:21:32 · 910 阅读 · 0 评论 -
The bean ‘xxx-xxx.FeignClientSpecification‘, defined in null, could not be registered. A bean with t
此错误是因为spring容器中存在相同名称的bean对象,在yml配置文件中配置代码。原创 2021-08-24 16:17:03 · 597 阅读 · 0 评论 -
启动SpringBoot服务报Error running Application. Command line is too long. Shorten the command line via JAR
编辑配置主启动类,选择 JAR manifest 即可。原创 2022-04-18 16:22:23 · 1434 阅读 · 0 评论 -
Nacos搭建配置中心并支持多配置文件
spring-cloud-starter-alibaba-nacos-discovery 和 spring-cloud-starter-alibaba-nacos-config 分别为nacos的 注册中心客户端 和 配置中心客户端,需要基于 nacos服务端 来使用。1、spring cloud starter alibaba nacos config,引用这个配置中心的依赖后,需要使用bootstrap.yml作为中转配置文件,读取优先级bootstrap.yml > application.yml。原创 2021-08-19 17:54:25 · 5680 阅读 · 2 评论 -
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 · 5113 阅读 · 4 评论 -
SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑
【1】因为 @SpringBootApplication 中已经包含 @ComponentScan 注解、并且用以扫描主启动类同级目录下的组件配置类,所以我们。1、@SpringBootApplication 是联合注解,包含了 @ComponentScan 会默认扫描主启动类同级包目录下所有的组件类、配置类。2、如果我们需要扫描主启动类同级以外的包目录怎么?【4】在主启动单独使用 @ComponentScans 的时候,不需要指明主启动类同级包目录,不会影响默认扫描主启动类同级包目录。原创 2022-11-30 15:36:36 · 4317 阅读 · 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 · 1241 阅读 · 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 · 621 阅读 · 0 评论 -
SpringBoot项目集成Redisson实现分布式锁
备注:redisson-spring-boot-starter 方式不需要手动初始化 RedissonClient 实例。1、初始化 RedissonClient 实例配置类。原创 2022-11-27 04:16:06 · 975 阅读 · 0 评论 -
SpringBoot中@ConfigurationProperties的使用
ConfigurationProperties是springboot提供读取配置文件中属性的一个注解,它是实现了BeanPostProcessor接口,在bean被实例化后,会调用后置处理,递归的查找属性,通过。1、如果是多个属性映射,而且经常被复用,推荐使用 @ConfigurationProperties,此方式无需给默认值,读取不到属性默认为空。2、如果只读取单个属性则推荐使用 @Value,@Value支持spel表达式,必须给默认值,否则读取不到属性会报错。通常是作用在配置类或组件类上面。原创 2022-11-21 15:33:52 · 3248 阅读 · 0 评论 -
Spring或SpringBoot中的@ConditionalOnProperty、@ConditionalOnMissingBean、@ConditionalOnExpression及SPI作用
Spring容器加载注册JavaBen的时候,如果在同一个 @Configuration或@Component 标注的配置类中配置多个BeanId相同的实例,那么Spring容器默认只加载第一个同名的实例,在实际应用中需要注意这一点。【1】我们可以将需要条件限制的类当做自动装配类,这样在注册Bean阶段可以保证在我们限制的类注册进容器之前、让被限制的实例先完成注册入容器中,1、因为在实际的应用过程中,我们使用第三方插件,他们的默认配置都会存在于插件的jar包中,而我们的自定义的配置类则在于自身的应用中。原创 2022-11-14 14:09:34 · 1473 阅读 · 0 评论 -
SpringBoot项目集成XXL-Job实现分布式任务调度
1】复制xxl-job-admin模块到项目中,适当修改pom文件版本依赖等,例如修改父模块、mysql连接版本、mybatis版本、xxl-job-core依赖包版本等。1、Bean运行模式下,后台代码中对应的 @XxlJob 任务名称不能带/斜杠,并且需要与任务配置中的 JobHandler 一致,否则调度中心找不到此任务,无法执行成功。(2)、xxl.job.executor.appname【任务名称,需要和任务调度中心配置的任务名称相同】1、初始化并启动调度中心,可以理解为执行器的注册中心。原创 2021-12-14 18:16:30 · 1464 阅读 · 0 评论 -
SpringBoot项目异常捕捉全局异常、空指针、自定义异常、表单校验、分组校验等
在开发中,通常我们需要对异常分类捕捉处理,例如全局异常、空指针异常、运行时异常、自定义业务异常、springframework.validation验证表单消息等,捕捉记录日志文件后,再把捕捉到的异常消息统一响应到前端。2、Get请求方式校验会抛出 ConstraintViolationException 异常,Get方式验证需要在 Controller 类上面标记 @Validated 才会生效。说明:如果不需要分组校验,只需要去掉 groups 就行了,不指定分组就是统一校验。原创 2021-11-27 02:55:39 · 1533 阅读 · 0 评论 -
SpringBoot项目切面编程AOP之@Aspect
aop切面编程想必大家都不陌生了,aspect可以很方便开发人员对请求指定拦截层,一般是根据条件切入到controller控制层,做一些鉴权、分析注解、获取类名方法名参数、记录操作日志等。2、aop默认无法切入 private 修饰的方法,切入点表达式定义的修饰符要和被切入的方法修饰符一致,否则无法切入。5、@Around:环绕增强,包围一个连接点的增强,最强大的一个方式,且常用。3、使用切入点切入标记注解@Before、@After、@Around等。2、定义切入点标记注解@Pointcut。原创 2021-11-26 16:56:46 · 10296 阅读 · 0 评论 -
SpringBoot项目注入使用RestTemplate需要构建实例对象交给Spring容器
构建实例对象代码,实例如下:package com.chhliu.springboot.restful; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import .原创 2021-11-15 16:18:31 · 704 阅读 · 0 评论 -
SpringBoot项目全局配置日期类型格式化和时区为东八区,解决日期类型返回前端少八个小时的问题
在字段上使用日期格式化注解,会优先使用字段格式化注解。1、使用 yml 文件配置全局格式化日期如下。原创 2021-10-25 16:04:18 · 1367 阅读 · 1 评论 -
静态类和动态类的区别和使用
1、因为此类中 writeEasyExcel() 方法中调用了 annotationUtil.resolveAnnotation() 方法,而 AnnotationUtil 类中的 resolveAnnotation() 方法需要和 redis 数据库交互,所以需要把 AnnotationUtil 类标记为组件对象加入容器,使用注入的方式调用 redisTemplate 对象。如果类中需要和数据库交互或者需要和Spring容器交互,需要使用JavaBean动态组件类,如2说明。被调用的类规则也是如此。原创 2021-10-15 11:33:24 · 1053 阅读 · 0 评论 -
SpringBoot项目集成logback日志
直接在资源目录下配置 logback-spring.xml 文件,原创 2021-09-25 01:35:06 · 336 阅读 · 0 评论 -
SpringBoot集成Swagger接口文档
三、以上配置完成后,访问。原创 2021-09-20 23:55:06 · 257 阅读 · 0 评论 -
SpringBoot项目使用Junit单元测试案例
2、@SpringBootTest(classes = {Application.class}) 指定启动类,如果不配置启动类,则执行的包、类可以放在该项目的任何地方。如果指定了启动类,那么启动类执行的类、包必须也放在 test 目录相应的包下,否则会报错。4、@Before:在 @Test 执行之前执行。5、@After:在 @Test 执行之后执行。3、@Test:测试执行的主方法。原创 2021-09-15 17:56:40 · 702 阅读 · 0 评论 -
SpringBoot拦截器不生效解决办法
如果在项目中多个类同时继承 WebMvcConfigurationSupport 和实现 WebMvcConfigurer的情况,将会导致只有 WebMvcConfigurationSupport 生效。将这些配置都在一个类中设置,将代码整合至一个类中或者删除 WebMvcConfigurationSupport 配置,拦截器才会生效。继承:WebMvcConfigurationSupport。实现:WebMvcConfigurer。原创 2021-08-28 23:53:55 · 4061 阅读 · 0 评论 -
SpringBoot项目主启动类上常用的注解释意
6、@MapperScan:扫描 mapper 接口类,例:@MapperScan(value = {"com.hkl.modules.*.mapper","com.hkl.modules.*.dao"})7、@ComponentScan:扫描组件类,例:@ComponentScan(value = {"com.diboot.core.*","com.hkl.*"})1、@SpringBootApplication:标记该项目为SpringBoot项目。原创 2021-07-29 18:05:38 · 1280 阅读 · 0 评论 -
开发中常用注解说明
2、@PostConstruct:主启动类启动之后并且Spring加载Servlet容器扫描组件创建Java Bean、完成bean注入之后,会自动执行@PostConstruct修饰标记的方法(@PostConstruct注解的方法将会在依赖注入完成后被自动调用)。3、@PreDestroy:Spring容器加载Servlet容器时候运行,类似于Servlet的destroy()方法,被@PreDestroy修饰的方法会在destroy()方法之后运行。原创 2021-07-29 18:03:50 · 324 阅读 · 0 评论