
Spring Boot
文章平均质量分 54
ywb201314
兵法有言,知己知彼,百战不殆
展开
-
Spring Boot 之 ModelFactory
【代码】Spring Boot 之 ModelFactory。原创 2023-12-04 16:16:20 · 760 阅读 · 0 评论 -
springboot如何把HttpServletRequest传入到controller
是由如tomcat这种Servlet容器创建的。Tomcat 创建的 Request 和 Response 的类结构图。至于这个是怎么传到你对应的controlle法内的,实际上就是SpringMVC里面的起的作用。这里先不展开,下面再讨论,先看一张图。转载 2023-10-11 16:53:00 · 556 阅读 · 0 评论 -
Spring Boot注入Servlet、Filter、Listener 注解方式和使用RegistrationBean二种方式 加源码分析
2. urlPatterns = {"/css/*", "/images/*"} 当请求 /css/目录资源或者 /images/目录下资源的时候,会经过该过滤器。2. urlPatterns = {"/css/*", "/images/*"} 当请求 /css/目录资源或者 /images/目录下资源的时候,会经过该过滤器。//"/servlet01", "/servlet02" 就是注入的Servlet的url-pattern。//创建原生的filter。转载 2023-07-13 09:46:27 · 205 阅读 · 0 评论 -
SpringServletContainerInitializer
serlvet容器启动时 ,会将SPI注册的Java EE 接口 ServletContainerInitializer 的所有实现类(例如:SpringServletContainerInitailizer)挨个回调 onStartup 方法,,而 onStartup需要的参数,就是通过@HandlerType 传递的,在jar包的META-INF/services/ 下面创建一个文件,,文件名是接口的全限定名,,,文件内容是接口的实现类的全限定名,,只能在使用jar文件中,不能使用在web项目中。转载 2023-06-28 15:40:06 · 215 阅读 · 0 评论 -
SpringSecurity------WebSecurityConfiguration配置类
简单的说,这个类的作用就是用来创建FilterChainProxy,FilterChainProxy是一个Servlet Filter,他是一组SecurityFilterChain的代理,用于管理这些SecurityFilterChain。这个方法是接口ImportAware的方法,当前配置类是通过@EnableWebSecurity注解上的@Import注解引入的,实现该接口的方法使得当前配置类可以获取到@EnableWebSecurity的debug属性值。转载 2023-03-15 15:35:50 · 1891 阅读 · 0 评论 -
SpringBoot--@Configuration(proxyBeanMethods = false) 的作用
如果配置类中的@Bean标识的方法之间不存在依赖调用的话,可以设置为false,可以避免拦截方法进行代理操作,提升性能。可以支持通过常规Java调用相同类的@Bean方法而保证是容器内的Bean,这有效规避了在“Lite模式”下操作时难以跟踪的细微错误。会走bean的生命周期中的一些行为(比如:@PostConstruct、@Destroy等 Spring中提供的生命周期)@Bean标识的返回值对象还是会放入到容器中的,从容器中获取bean还是可以是单例的,会走生命周期。如果为true,则是Full模式。转载 2023-03-13 10:45:48 · 352 阅读 · 0 评论 -
Spring的@Configurable
大家都知道,在Spring容器里的对象可以通过@Autowired来注入,但是如果这个对象是你自己new出来的,恐怕很难通过@Autowired来获得对象了。我们先看一下我们的一个普通对象,这个对象里我们注入一个Spring的ApplicationContext。@Configurable这个注解就是为了给非Spring容器管理的对象提供注入Spring容器内对象的一个注解。可以看到,Spring为我们添加了很多方法,这也就解释了为啥能注入spring bean的原因了。我们写测试类来看看结果,转载 2023-01-31 14:45:42 · 1614 阅读 · 0 评论 -
解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF
conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=| ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|{},然后去掉这句话的注释。但若是在IE浏览器上进行访问,这个错误还是会出现,在IE上访问出现这个错误的原因:因为url的参数json中有双引号,火狐和谷歌浏览器会自动对url进行转码,但IE不会。转载 2022-12-14 13:28:14 · 8558 阅读 · 0 评论 -
Spring事务aftercommit原理及实践
我们的aftercommit在triggerAfterCommit执行,这个方法里面抛出了异常,因为没有catch,异常会往上传递,在cleanupAfterCompletion里也没有处理异常,但是对于mybatis来讲,它改变了autocommit状态,所以更改被提交了。这是一个你想不到的坑。如果你要做数据库操作,你需要在一个新的事务中,可以使用。回顾我们上面展示的场景,我们在一个事务里,注册了一个aftercommit钩子,并且aftercommit里面,也会再次操作数据库,执行dml操作。转载 2022-11-17 21:51:24 · 1928 阅读 · 0 评论 -
@EnableGlobalMethodSecurity三方法详解
EnableGlobalMethodSecurity三方法详解要开启Spring方法级安全,在添加了注解的类上再添加注解即可其中注解[@Secured]在同一个应用程序中,可以启用多个类型的注解,但是只应该设置一个注解对于行为类的接口或者类。如:但是只应该设置一个注解对于行为类的接口或者类。转载 2022-10-09 16:51:23 · 2577 阅读 · 0 评论 -
@EnableGlobalMethodSecurity详解
该注解的机制是只要其声明的角色集合(value)中包含当前用户持有的任一角色就可以访问。也就是 用户的角色集合和 @Secured 注解的角色集合要存在非空的交集。从名字就可以看出@PreAuthorize 注解会在方法执行前进行验证,而 @PostAuthorize 注解会在方法执行后进行验证。在需要安全[角色/权限等]的方法上指定 @Secured,并且只有那些角色/权限的用户才可以调用该方法。@PostFilter: 和@PreFilter 不同的是, 基于返回值相关的表达式,对返回值进行过滤。转载 2022-10-09 16:49:28 · 1559 阅读 · 0 评论 -
Spring高级之注解@DependsOn详解(超详细)
需要用到观察者模式的情况下通常都需要用到该注解,观察者模式(详细可查看相关文章)有三要输,观察者、事件源、事件,机制是观察者会监听数据源的某些时间,当事件源触发该事件后,观察者就会知道进行相应措施。这类场景一般需要观察者要比事件源先创建,才能不遗漏事件源触发的每一个事件,要是事件源先创建,可能会在观察者创建前就触发了事件而观察者无法知道。比如老师是观察者,学生是事件源,学生迟到是事件,老师观察学生是否迟到,每当学生迟到,老师就会发现,并处罚该学生。//当作用在方法上时,通常会与@Bean注解配合使用。转载 2022-10-09 09:50:00 · 991 阅读 · 0 评论 -
Spring(32)——ImportSelector介绍
因为在它的selectImports()你可以实现各种获取bean Class的逻辑,通过其参数AnnotationMetadata importingClassMetadata可以获取到@Import标注的Class的各种信息,包括其Class名称,实现的接口名称、父类名称、添加的其它注解等信息,通过这些额外的信息可以辅助我们选择需要定义为Spring bean的Class名称。可能有的时候你不希望依赖于配置类上的@ComponentScan,而期望直接扫描配置类所在的包。转载 2022-10-08 16:50:57 · 400 阅读 · 0 评论 -
SpringBoot教程(2) @Import和ImportSelector的使用
通常我们要定义一个类实现ImportSelector ,它的selectImports方法返回的是String[],就是需要初始化的类的全类名数组。@Import修饰在类名上,给容器中自动创建出对应class类型的组件、默认组件的名字就是全 类 名 \color{red}{全类名}全类名。System.out.println("初始化了PiggMainConfig()");System.out.println("初始化了PiggMainConfig()");创建一个有@Configuration的类。转载 2022-10-08 16:48:36 · 527 阅读 · 0 评论 -
Spring Cloud Sleuth服务调用链路追踪
目地址为: https://github.com/kevin-lihongmin/spring-cloud-project-kevin/tree/master/zipkin-demo,其中Zipkin服务不可用,所以可以使用单独的包进行部署。之前的Spring Cloud Robbin搭建中有说明,ribbon有在本地配置中添加服务端列表的方式和在注册中心或者服务者列表两种调用方式,现在把三个服务都注册到注册中心,动态进行调用,ribbon-demo详见Spring Cloud Ribbon负载均衡实现。.转载 2022-08-31 13:41:50 · 706 阅读 · 0 评论 -
SpringBoot使用prometheus监控
本文介绍SpringBoot如何使用Prometheus配合Grafana监控。转载 2022-08-30 14:39:26 · 615 阅读 · 0 评论 -
feign启用httpclient、okhttp
源码中,并没有设置 feign.okhttp.enabled 默认为 true,所以如果要启用okhttp的话,需要在配置文件中设置 feign.okhttp.enabled=true,同时需要引入okhttp的相关依赖。所以从 openfeign的 ribbon 下的 HttpClientFeignLoadBalancedConfiguration源码中可以看出。加了注解@ConditionalOnProperty,在没有配置 feign.httpclient.enabled 时,默认为true。...转载 2022-08-30 14:28:45 · 1702 阅读 · 0 评论 -
关于Ribbon重试机制的坑
通过上面的分析,我们可以知道并不是配置了ribbon.OkToRetryOnAllOperations=false就不会进行重试,对于GET请求Ribbon还是会进行重试的,而在我们的系统中并没有对Ribbon的重试机制做特殊的配置,也就是用的默认值。初步猜测可能是Feign或Ribbon的重试机制导致的。像在一般的系统中,建议关闭Ribbon的重试机制,如果非得开启重试,那么系统的各个接口一定要保证接口的幂等性,否则可能会导致接口逻辑被执行多次的情况,在一些重要数据的场景带来的影响将是灾难性的。...转载 2022-08-30 14:02:39 · 1382 阅读 · 0 评论 -
Ribbon的超时和重试机制
ribbon实现了负载均衡,如果访问某服务的A节点超时后,会触发ribbon的重试机制Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。...转载 2022-08-30 14:01:12 · 1468 阅读 · 0 评论 -
【你好Ribbon】十三:Ribbon负载均衡器接口ILoadBalancer-最基础的负载均衡器BaseLoadBalancer
这个负载均衡器在实际的开发过程中 使用的不是很多 但是作为理解ILoadBalancer 是必不可少的,它提供了最最基础的负载均衡能力,所以你直接使用是没有任何问题的,在有些时候其实直接使用它也是比较好的选择。前面我们对Ribbon负载均衡模块的五大组件进行了简单的概述,但大部分情况这五个组件相互配合工作才能实现负载均衡的能力,而今天我们说的ILoadBalancer说白了就是对这些组件组合的一个容器。小Tips: 注意默认的ping的策略是 线性的Ping这对于具有很多服务器的系统不是一个很好的选择。..转载 2022-08-30 13:51:16 · 624 阅读 · 0 评论 -
spring中 allowBeanDefinitionOverriding(spring.main.allow-bean-definition-overriding) 分析
设置为true时,后定义的bean会覆盖之前定义的相同名称的bean。原因就是上面贴出来的是spring的代码,而springboot对这个参数又进行了二次封装,springboot中的allowBeanDefinitionOverriding是没有初始化默认值的,我们知道,java中的boolean类型不初始化时是false。因为还是推荐一个系统中不要存在名称相同的bean,否则后者覆盖前者,多人分工合作的时候,难以避免某些bean被覆盖,会出现很多诡异的问题 ,甚至会带来线上真实的业务损失。...转载 2022-08-29 19:37:04 · 7658 阅读 · 0 评论 -
EUREKA 安全验证 CANNOT EXECUTE REQUEST ON ANY KNOWN SERVER 错误问题
言归正传,首先我们先准备两个服务,一个 eureka 服务端、一个eureka 客户端 方便验证。好久没写博客了,哈哈。搞了三台服务器慢慢玩。然后我们打开eureka 的效果如下。可以看到已经成功注册上去了。pom.xml 引用。pom.xml 引用。...转载 2022-08-29 14:40:49 · 357 阅读 · 0 评论 -
Spring Boot学习笔记(六):Spring Boot 应用监控
Spring Boot 2.0提供的常用端点如下所示。序号端点名描述默认开启(Web)默认开启(JMX)1actuator所有端点的列表,需加入spring HATEOAS支持是是2显示应用暴露的审计事件 (比如认证进入、订单失败)是否3info显示应用的基本信息是是4health显示应用的健康状态是是5metrics显示应用多样的度量信息否是6loggers显示和修改配置的loggers否是7logfile。...转载 2022-08-28 14:45:55 · 512 阅读 · 0 评论 -
关与 @EnableConfigurationProperties 注解
先说作用:@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。说明:如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfigurationProperties 相当于把使用 @ConfigurationProperties 的类进行了一次注入。测转载 2021-05-21 10:43:21 · 168 阅读 · 0 评论 -
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明
Jackson 是SpringMvc 官方推荐结合的,其实我是习惯用 Gson 的,但是由于公司统一使用 Jackson ,自然对 Jackson 需要关注的更多。下面来说说其中一个注解,就是@JsonFormat。@JsonFormat 使用我们可以有两种用法(我知道的),在对象属性上,或者在属性的getter方法上,如下代码所示:增加到属性上:... ... /**更新时间 用户可以点击更新,保存最新更新的时间。**/ @Json...转载 2020-09-21 15:33:45 · 1197 阅读 · 1 评论 -
@JsonFormat与@DateTimeFormat注解的使用
@JsonFormat与@DateTimeFormat注解的使用背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,其次,另一个问题是,我们在使用WEB服务的时,可能会需要用到,传入时间给后台,比如注册新用户需要填入出生日期等,这个时候前台传递给后台的时间格式同样是转载 2020-09-21 15:32:33 · 389 阅读 · 0 评论 -
SpringBoot基础篇日志管理之logback配置文件
SpringBoot默认选用logback进行日志管理,前一篇讲述了默认配置日志的参数,然而这些内容比较初级,并不一定能满足我们更加特殊的需求(比如输出到多个不同的配置文件,不同的包路劲选择不同的输出方式等)所以本篇的内容,主要介绍logback.xml配置文件的语法,虽然与SpringBoot本身没有太多的关联性,但在SpringBoot项目中却非常实用<!-- more -->I. logback配置也不针对语法进行逐一说明了,直接针对常见的xml配置文件进行分析,反正看完也转载 2020-09-10 12:00:14 · 196 阅读 · 0 评论 -
【译】Spring的@EnableCaching注解
Spring的@EnableCaching注解@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用转载 2020-09-01 09:58:00 · 11756 阅读 · 0 评论 -
springboot使用@EnableCaching实现缓存
项目中我们对于不易改动的信息没必要每次都去数据库查询,可以将查询结果放入缓存中,第二次调用时,直接在缓存中获取,不再经过数据库1:配置cacheManager类@EnableCaching@Configurationpublic class CacheConfig { @Bean public ConcurrentMapCacheManager cacheManager() { ConcurrentMapCacheManager cacheManage转载 2020-09-01 09:56:58 · 292 阅读 · 0 评论 -
Ribbon重试的坑
我们在使用Ribbon或者Feigin的时候,是可以开启超时重试功能的,网上很多资料都会讲到,这里就不啰嗦了。那么我们要关闭这个功能呢?开启的配置如下(另外ribbon超时时间和断路器超时时间也需要配置)spring.cloud.loadbalancer.retry.enabled=trueribbon.ReadTimeout=90000ribbon.ConnectTimeout=10000#Hystrix超时时间(默认1000ms,单位:ms)hystrix.comman.转载 2020-07-24 14:00:24 · 374 阅读 · 1 评论 -
SpringCloud Feign重试详解
摘要: 今天在生产环境发生了数据库进程卡死的现象,除了sql因为全量更新,没加索引的原因,最主要还是我们的接口的服务器端接口出现问题了。忽视了更新接口的幂等性,以及调用方feign client的重试,导致接口重复执行。万幸的是数据已经修复,花了几个小时跟踪feign和ribbon的源码,把其原理彻底搞明白了。 feign是netflix提供的服务间基于http的rpc调用框架,在spring cloud得到广泛应用。默认情况下,一个feign client是在hystrix断路器中执行,并利...转载 2020-07-24 13:58:19 · 336 阅读 · 0 评论 -
SpringCloud重试机制配置
首先声明一点,这里的重试并不是报错以后的重试,而是负载均衡客户端发现远程请求实例不可到达后,去重试其他实例。Table 1. ribbon重试配置 ribbon.OkToRetryOnAllOperations false(是否所有操作都重试) ribbon.MaxAutoRetriesNextServer 2(重试负载均衡其他的实例最大重试次数,不包括首次server) ribbon.MaxAutoR...转载 2020-07-24 13:56:56 · 317 阅读 · 0 评论 -
eureka分区的深入讲解
https://segmentfault.com/a/1190000014107639原创 2020-07-22 13:45:39 · 196 阅读 · 0 评论 -
Eureka详解
该章节紧接第三章,主要是对一些理论上的指导,帮助更好的理解服务治理。基础架构 eureka服务治理的基础架构包含三个要素: 1)服务注册中心:eureka提供服务端,提供服务的注册与发现功能。 注:在配置注册中心时,记得避免注册中心向自己注册,需要在配置文件中添加: eureka.client.register-with-eureka=false(这个是避免eureka向自己进行注册) eureka.client.fetch-registry=false转载 2020-07-22 13:43:17 · 1606 阅读 · 0 评论 -
Eureka详解
一、基础架构*1、服务注册中心**提供服务注册 和发现服务功能*高可用:eureka server 即为服务注册中心,此服务可以为集群,(集群就是两个或以上),形成高可用的eureka注册中心。服务同步:多个 eureka server 之间相互注册,服务提供者不管在哪个节点服务注册,该节点服务会把信息同步给集群的每个服务,从而实现数据同步,为的就是客户端访问到服务的任意节点都会获取完整的服务列表。eureka server 提供了失效自动剔除和自我保护功能:失效剔除:有些时候,转载 2020-07-22 13:33:28 · 309 阅读 · 0 评论 -
Eureka强制下线上线操作
eureka下线和上线操作可以通过postman和soapui或者其他http工具来发送命令:下线:调用方式:PUThttp://192.168.1.1:8810/eureka/apps/USER-SERVICE/192.168.1.9:user-service:8086/status?value=OUT_OF_SERVICE上线:调用方式:PUThttp://192.168.1.1:8810/eureka/apps/USER-SERVICE/192.168.1.9:user-s.转载 2020-07-22 13:32:48 · 541 阅读 · 0 评论 -
Eureka工作原理
Eureka 工作原理上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 核心概念回到上节的服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka转载 2020-07-22 13:31:59 · 130 阅读 · 0 评论 -
使用RestTemplate时报错java.lang.IllegalStateException: No instances available for 127.0.0.1
我在RestTemplate的配置类里使用了 @LoadBalanced@Componentpublic class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }}再调用@Autowiredprivate RestTemplate restTemplate;必须使用应...转载 2020-07-22 09:45:55 · 1067 阅读 · 0 评论 -
spring cloud ----> RibbonClient设置的熔断器Hystrix不起作用
Ribbonspring.io官网的简介:Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients.自己的翻译:Ribbon是一个用来负载均衡的客户端,对于http和tcp客户端行为,Ribbon能给与你很多的控制方式。在给Ribbon设置熔断器Hystrix的时候发现熔断器不起作用。代码如下:例子...转载 2020-07-21 20:46:38 · 257 阅读 · 0 评论 -
feign的hystrix不起作用
在springCloud中使用feign内嵌的断路器hystrix时。feign中的hystrix不起作用。这可能是由于springCloud的版本原因造成的。需要在application.properties配置中开启hystrix: feign.hystrix.enabled=true转载 2020-07-21 20:29:23 · 806 阅读 · 0 评论