
spring boot
文章平均质量分 81
狂奔的蜗牛Evan
hello world
展开
-
求求你们了,别再重复造轮子了,一个 Spring 注解轻松搞定循环重试功能!
在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用try/catch,while循环之类的语法来进行重处理,但是这样的做法缺乏统一性,并且不是很方便,要多写很多代码。然而spring-retry却可以通过注解,在不入侵原有业务逻辑代码的方式下,优雅的实现重处理功能。转载 2023-12-26 23:51:38 · 483 阅读 · 1 评论 -
拒绝写重复代码,试试这套开源的 SpringBoot 组件
Graceful Response是一个Spring Boot技术栈下的优雅响应处理器,提供一站式统一返回值封装、全局异常处理、自定义异常错误码等功能,使用Graceful Response进行web接口开发不仅可以节省大量的时间,还可以提高代码质量,使代码逻辑更清晰。强烈推荐你花3分钟学会它!,注意选择最新版本的分支。Spring Boot版本Graceful Response版本graceful-response-example分支2.x3.x。转载 2023-12-26 23:11:11 · 103 阅读 · 0 评论 -
SpringBoot实现动态切换数据源:轻松应对复杂多变业务需求!
上述提到了ThreadLocal和AbstractRoutingDataSource,我们来对其进行简单介绍下。:想必大家必不会陌生,全称:thread local variable。主要是为解决多线程时由于并发而产生数据不一致问题。ThreadLocal为每个线程提供变量副本,确保每个线程在某一时间访问到的不是同一个对象,这样做到了隔离性,增加了内存,但大大减少了线程同步时的性能消耗,减少了线程并发控制的复杂程度。ThreadLocal作用:在一个线程中共享,不同线程间隔离。转载 2023-12-24 12:01:49 · 345 阅读 · 0 评论 -
SpringBoot循环依赖的6种解决方案
当一个类在初始化时需要另一个类的实例,而另一个类又需要第一个类的实例时,就会出现循环依赖问题。这会导致应用程序无法正确地初始化和运行,因为Spring Boot 无法处理这种循环依赖关系。在启动时程序就会报错。转载 2023-10-23 23:49:57 · 12856 阅读 · 1 评论 -
SpringBoot整合Mybatis实现多数据源配置与跨数据源事务实例
思考: @Transactional只能指定一个事务管理器,并且注解不允许重复,所以就只能使用一个数据源的事务管理器了。首先多个数据源的事务分别都开起来,然后各事务分别去执行对应的sql(此所谓第一阶段提交),最后如果都成功就把事务全部提交,只要有一个失败就把事务都回滚——此所谓第二阶段提交。到此这篇关于SpringBoot整合Mybatis实现多数据源配置与跨数据源事务实例的文章就介绍到这了。的值,根据使用不同的数据源,选择不同的数据事务管理器。在事务的方法上添加前面我们的多数据源事务注解。转载 2023-10-24 00:19:51 · 2330 阅读 · 3 评论 -
SpringBoot配置文件加载优先级(全)
springboot打成jar包或者war包读取外部配置文件加载优先级问题转载 2022-06-14 11:52:16 · 6256 阅读 · 1 评论 -
SpringBoot项目打包成jar后,使用ClassPathResource获取classpath(resource)下文件失败
我在读取邮件模板的时候,本地测试使用ClassPathResource都可以正常读取,但打包成jar包传到服务器上就无法获取了,报错信息是:class path resource [xxxx] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:xxxx.jar!/BOOT-INF/classes!xxxx,话不多说,先看正确的获取方法:使用PathMatchingR原创 2022-04-11 23:02:45 · 9854 阅读 · 2 评论 -
Spring @Autowired Map 和 List
在开发的时候有时候经常会看到这样代码这是Spring的一个特殊的注入功能如图所示当注入一个Map的时候 ,value泛型为MaoService,则注入后Spring会将实例化后的bean放入value ,key则为注入后bean的名字当注入一个List的时候,List的泛型为MaoService,则注入后Spring会将实例化的bean放入List中做个测试首先定义一个接口package com.service;public interface MaoService {转载 2021-04-14 10:31:20 · 356 阅读 · 0 评论 -
SpringBoot项目jar启动异常:java.io.FileNotFoundException: file:/xxx/xxx.jar!/BOOT-INF/classes!/xxx.yml
问题最近公司项目要对接一个平台服务,项目是新建的,使用的是SpringBoot2.x,但对接平台给的整合包比较旧,2015开发的,整合进来发现存在一个问题:启动时找不到配置resources目录下的配置文件。异常内容如下:java.io.FileNotFoundException: file:/xxx/project-xxx.jar!/BOOT-INF/classes!/xxx.yaml (No such file or directory)1很奇怪,检查了打包出来的jar,配置文件明明是存在转载 2021-03-26 14:20:57 · 4113 阅读 · 0 评论 -
基于SpringBoot构造器注入循环依赖及解决方式
这篇文章主要介绍了基于SpringBoot构造器注入循环依赖及解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。1. 循环依赖是什么?Bean A 依赖 B,Bean B 依赖 A这种情况下出现循环依赖。Bean A → Bean B → Bean A更复杂的间接依赖造成的循环依赖如下。Bean A → Bean B → Bean C → Bean D → Bean E → Bean A2. 循环依赖会产生什么结果?当Spring正在加载所有Bea转载 2021-03-24 22:52:50 · 1804 阅读 · 1 评论 -
Spring Boot项目中如何定制HTTP消息转换器
在构建RESTful数据服务过程中,我们定义了controller、repositories,并用一些注解修饰它们,但是到现在为止我们还没执行过对象的转换——将java实体对象转换成HTTP的数据输出流。Spring Boot底层通过HttpMessageConverters和Jackson库将Java实体类输出为JSON格式。当有多个转换器可用时,根据消息对象类型和需要的内容类型选择最适合的转换器使用。在SpringMVC源码剖析(五)-消息转换器HttpMessageConverter一文中,有转载 2021-03-22 11:47:16 · 226 阅读 · 0 评论 -
springboot下MVC的MessageConverters和静态资源位置的配置
文章目录1. WebMvcConfigurationSupport、WebMvcConfigurer 区别2. 自定义消息转换器MessageConverters3. 静态资源3.1 静态资源位置3.2 错误页面1. WebMvcConfigurationSupport、WebMvcConfigurer 区别springboot中我们通过继承WebMvcConfigurerAdapter进行springmvc相关的配置,如拦截器、消息转换、视图解析器等。在springboot2.0后,.转载 2021-03-22 11:36:07 · 820 阅读 · 0 评论 -
springboot添加文件虚拟路径(指定本地磁盘存放附件)
所有开发项目中,把附件存放于项目目录下,日后运维工作简直要人命.所以使用虚拟路径就能很好的解决本问题:@Configurationpublic class MyPicConfig implements WebMvcConfigurer { /** * 上传的图片在F盘下的file目录下,访问路径如:http://localhost:8080/file/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg * 其中file表示访问的前缀...转载 2021-03-16 19:36:15 · 572 阅读 · 0 评论 -
@Validated与@Valid的区别(JSR-303方法文档使用说明)
@Validated与@Valid的区别(JSR-303方法文档使用说明)介绍一下JSR-303常用的方法@NotNull 注解元素必须是非空@Null 注解元素必须是空@Digits 验证数字构成是否合法@Future 验证是否在当...转载 2021-03-11 10:25:47 · 448 阅读 · 0 评论 -
参数validator/valid校验用法(通俗)
这么写参数校验(validator)就不会被劝退了~很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者 不断的返回异常时的校验信息,在代码中相当冗长, 充满了if-else这种校验代码,今天我们就来学习spring的javax.validation 注解式参数校验.为什么要用validator javax.validation的一系列注解可以帮我们完成参数校验,免去繁琐的串行校验 不然我们的代码就像下面这样: //http://localhost:8080/api/user/.转载 2021-03-10 17:44:32 · 2894 阅读 · 0 评论 -
springboot @Valid 注解用法详解
@Valid 注解通常用于对象属性字段的规则检测,具体啥意思,下面让我娓娓道来:下面我们以新增一个员工为功能切入点,以常规写法为背景,慢慢烘托出 @Valid 注解用法详解。那么,首先,我们会有一个员工对象 Employee,如下 :/*** 员工对象** @author sunnyzyq* @since 2019/12/13*/public class Employee { /** 姓名 */ public String name; ...转载 2021-03-06 15:39:57 · 7714 阅读 · 0 评论 -
springboot注解@NotNull,@NotBlank,@Valid自动判定空值
一、前言 搭建springboot项目,我们都是采用的Restful接口,那么问题来了,当前端调用接口或者是其他项目调用时,我们不能单一靠调用方来控制参数的准确性,自己也要对一些非空的值进行判定。二、方案 按照我们以往的做法,都是对request中的参数一个一个进行非空判定。 Model: public class Order { private Long userID; private Long addressID;...转载 2021-03-06 15:08:11 · 6501 阅读 · 0 评论 -
阿里开源的限流神器 Sentinel,轻松搞定接口限流!
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。来看一下sentinel的简介:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel转载 2021-01-05 23:37:02 · 694 阅读 · 0 评论 -
Spring/SpringBoot系列之SpringBoot在2.x默认使用Cglib动态代理(1.x中默认使用JDK动态代理)【二十二】
Spring 5.x中AOP默认依旧使用JDK动态代理 SpringBoot 2.x开始,为了解决使用JDK动态代理可能导致的类型转换异常,而使用CGLIB。 在SpringBoot 2.x中,如果需要替换使用JDK动态代理可以通过配置项spring.aop.proxy-target-class=false来进行修改,proxyTargetClass配置已无效。1. springboot 2.x 版本分析在 SpringBoot 中,通过AopAutoConfiguration来自动装配 AOP转载 2020-11-25 16:45:47 · 1050 阅读 · 0 评论 -
springboot实现读写分离(基于Mybatis,mysql)
近日工作任务较轻,有空学习学习技术,遂来研究如果实现读写分离。这里用博客记录下过程,一方面可备日后查看,同时也能分享给大家(网上的资料真的大都是抄来抄去,,还不带格式的,看的真心难受)。完整代码:https://github.com/FleyX/demo-project/tree/master/dxfl1、背景 一个项目中数据库最基础同时也是最主流的是单机数据库,读写都在一个库中。当用户逐渐增多,单机数据库无法满足性能要求时,就会进行读写分离改造(适用于读多写少),写操作一个库,读操作多个库,转载 2020-11-23 11:26:35 · 334 阅读 · 0 评论 -
在SpringBoot中使用AOP——通知中的参数
文章目录 使用JoinPoint获取 自动获取 在后置返回通知中获取返回值 在后置异常通知中获取异常 本文基于在SpringBoot中使用AOP获取被被通知方法参数并传递给通知方法,主要有两种方式:使用JoinPoint获取:Spring AOP提供使用org.aspectj.lang.JoinPoint类型获取连接点数据,任何通知方法的第一个参数都可以是JoinPoint(环绕通知是ProceedingJoinPoint,JoinPoint子类),当然第一个参数位置也..转载 2020-11-13 18:39:35 · 986 阅读 · 0 评论 -
Spring Boot 2.0官方文档之 Actuator
前言:本文翻译自Spring Boot 2.0.1.RELEASE官方文档,该Spring Boot版本是当前(2018年4月份)官方推荐版本,因Spring Boot 2.0的Actuator与之前版本有较大不同,而网上相关博文资料较旧,故建议阅读官方文档再做实践.转载需经本人同意,注明出处方可转载.参考:https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/html/production-ready-enabling.html转载 2020-07-16 14:40:18 · 204 阅读 · 0 评论 -
Dubbo之dubbo-spring-boot-actuator
dubbo-spring-boot-actuator 提供 Production-Ready 特性:健康检查控制断点外部化配置GitHub https://github.com/apache/incubator-dubbo-spring-boot-project/tree/master/dubbo-spring-boot-actuator#health-checks版本目前,dubbo-spring-boot-actuator将支持Spring Boot 2.x和1.x两个版本:0.转载 2020-07-07 14:06:53 · 1734 阅读 · 0 评论 -
SpringBoot Actuator 监控
监控与管理在微服务架构中,我们将原本庞大的单体系统拆分成多个提供不同服务的应用。 虽然各个应用的内部逻辑因分解而得以简化,但是由于部署应用的数量成倍增长,使得系统的维护复杂度大大提升。 对于运维人员来说,随着应用的不断增多,系统集群中出现故障的频率也变得越来 越高,虽然在高可用机制的保护下,个别故障不会影响系统的对外服务,但是这些频繁出现的故障需要被及时发现和处理才能长期保证系统处千健康可用状态。 为了能对这些成倍增长的应用做到高效运维,传统的运维方式显然是不合适的,所以我们需要实现一套自动化的监控转载 2020-06-17 19:05:19 · 549 阅读 · 0 评论 -
springboot使用hibernate @validator校验(@Valid)
目录一、参数校验 二、hibernate validator校验demo 三、hibernate的校验模式 1、普通模式(默认是这个模式) 2、快速失败返回模式 四、hibernate的两种校验 1、请求参数校验 2、GET参数校验(@RequestParam参数校验) a.此时需要使用MethodValidationPostProcessor 的Bean: b.方法所在的Controller上加注解@Validated c.返回验证信息提示 d.验证转载 2020-06-08 13:59:28 · 937 阅读 · 0 评论 -
使用ApplicationEvent和Listener快速实现业务解耦(EventListener)
ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。通过 ApplicationEvent 类和 ApplicationListener 接口来提供在 ApplicationContext 中处理事件。如果一个 bean 实现 ApplicationListener,那么每次 ApplicationEvent 被发布到 ApplicationContext转载 2020-06-04 18:54:56 · 477 阅读 · 1 评论 -
try catch 有多烦人,我就有多暴躁!一次搞定 Exception. (@ControllerAdvice + @ExceptionHandler)
背景软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。比较下面两张图,看看您现在编写的代码属于哪一种风格?然后哪种编码风格您更喜欢?丑陋的 try catch 代码块优雅的Controller上面的示例,还只是在Controller层,如果是在Service层,可能会有更多的try catc.转载 2020-06-04 09:58:43 · 802 阅读 · 0 评论 -
SpringBoot properties -- Profiles实现多环境下配置切换
本文目类:根据环境更改配置,不同环境配置不同 1.1 YAML 更改配置 1.2 application-${profile}.properties 更改配置 @Profile 使用 工具类根据环境更改配置官方文档方式一 YAML新建一个web项目,新建配置文件application.yml:server: port: 9090spring: profi...转载 2020-04-17 09:32:40 · 1421 阅读 · 0 评论 -
springBoot基础系列-properties配置
一、概述SpringBoot中免除了大部分手动配置,但是对于一些特定的情况,还是需要我们进行手动配置的,SpringBoot为我们提供了application.properties配置文件,让我们可以进行自定义配置,来对默认的配置进行修改,以适应具体的生产情况,当然还包括一些第三方的配置。几乎所有配置都可以写到application.peroperties文件中,这个文件会被SpringBoo...转载 2020-04-17 09:30:12 · 568 阅读 · 0 评论 -
springboot yml语法 ${} 用法
yml语法 ${} 用法yml中自定义一个域名属性:mytest: domainName: https://blog.csdn.net/imHanweihu/article/details/96111227那么在此配置文件中,就可通过${}来代替域名了url: helpCenter: ${xboot.domainName}/szoa/app/html/get...转载 2020-03-26 14:25:25 · 49508 阅读 · 1 评论 -
springboot应用服务报错Error parsing HTTP request header
springboot后端服务报错Error parsing HTTP request header问题:我司有一个springboot系统,只提供dubbo接口,不对外提供htttp服务。但是测试环境偶尔出现异常如下:2020-03-07 00:49:41.025 INFO [http-nio-8081-exec-8] [] [] org.apache.coyote.http1...原创 2020-03-12 17:03:44 · 9163 阅读 · 0 评论 -
springBoot启动时让方法自动执行的几种实现方式
一.开篇名义在springBoot中我们有时候需要让项目在启动时提前加载相应的数据或者执行某个方法,那么实现提前加载的方式有哪些呢?接下来我带领大家逐个解答1.实现ServletContextAware接口并重写其setServletContext方法@Componentpublic class TestStarted implements ServletContextAwar...转载 2020-03-12 14:30:49 · 921 阅读 · 0 评论 -
springboot 学习之路 9-Runner (项目启动后就执行特定方法)
springboot 项目启动后 就执行特定方法目录:【持续更新。。。。。】 spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成mybatis ) spring boot 学习之路4(日志输出) spring boot 学习之路5(打成war包...转载 2020-03-12 13:46:02 · 651 阅读 · 0 评论 -
SpringBoot 之jasypt 数据库密码加密
在开发过程中,需要多个开发环境,如开发环境,测试环境,集成环境,线上环境等等,有一些公司会有运维专门维护一套上线的配置文件,在发布时替换掉测试环境的配置文件,但也有一些是直接把线上配置prod和dev写在一起,这样就很不安全了,今天讲解一种配置文件密码加密的方式,可以有效避免这种情况。参考https://majing.io/posts/10000020471185Jasypt Sprin......转载 2020-01-13 18:38:22 · 6931 阅读 · 0 评论 -
Spring中的InitializingBean接口的使用
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。测试,如下:import org.springframework.beans.factory.InitializingBean;public class TestInitializingBean imple...转载 2020-01-13 17:48:17 · 308 阅读 · 0 评论 -
SpringBoot+Mybatis+Pagehelper分页
SpringBoot+Mybatis+Pagehelper分页1、pom.xml<!-- mybatis分页插件 --><dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter...转载 2019-12-30 23:19:06 · 1418 阅读 · 0 评论 -
SpringBoot如何集成Mybatis(四)
Mybatis是一款支持复杂的SQL语句,存储过程及高级映射的持久层的框架。使用Mybatis有两种方式,XML和注解。SpringBoot+Mybatis注解版Mybatis初期使用比较麻烦,需要很多配置文件、实体类、dao层映射、还有很多其他的配置。初期开发使用generator可以根据表结构自动生产实体类、dao层代码,这样是可以减轻一部分开发量;后期mybatis...转载 2019-12-30 22:59:34 · 237 阅读 · 0 评论 -
SpringBoot | 第七章:过滤器、监听器、拦截器
前言在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需关系的,业务只需要关系自己内部业务的事情。所以一般上实现以上的功能,都会或多或少的用到今天准备讲解的过滤器、监听器、拦截器来实现以上功能。过滤器过滤器Filter,是Servlet的的一个实用技术了。...转载 2019-12-30 18:52:31 · 180 阅读 · 0 评论 -
Spring Boot之AOP配自定义注解的最佳实践过程
前言AOP(Aspect Oriented Programming),即面向切面编程,是Spring框架的大杀器之一。首先,我声明下,我不是来系统介绍什么是AOP,更不是照本宣科讲解什么是连接点、切面、通知和切入点这些让人头皮发麻的概念。今天就来说说AOP的一些应用场景以及如何通过和其他特性的结合提升自己的灵活性。下面话不多说了,来一起看看详细的介绍吧AOP应用举例AOP的一大...转载 2019-12-16 16:27:35 · 245 阅读 · 0 评论 -
深入 Spring 系列之静态资源处理
1. 背景前一段时间,WebIDE 开源的过程中,无意间接触到webjars,觉得比较有趣,于是研究并整理了一下。webjars 是将前端的库(比如 jQuery)打包成 Jar 文件,然后使用基于 JVM 的包管理器(比如 Maven、Gradle 等)管理前端依赖的方案。webjars 的效果非常神奇。对于其用法,我们可以在 maven 项目中添加下面的依赖:<...转载 2019-12-13 19:15:17 · 327 阅读 · 0 评论