SpringBoot-原理
文章平均质量分 89
SpringBoot-原理,和概念相关
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
SpringBoot使用AbstractRoutingDataSource配置多数据源后sql日志不打印解决方案
简而言之:因为自定义了sqlSessionFactory,所以需要重新设置 mybatis的configuration,因为非默认的SqlSessionFactory无法自动读取 yaml中的 mybatis-configuration配置项。Springboot-整合多数据源配置 & AbstractRoutingDataSource详解,分析多数据源切换原理_springboot 2.1.8 版本 与 abstractroutingdatasource-CSDN博客。原创 2024-02-07 10:21:47 · 855 阅读 · 0 评论 -
@RequestBody注解原理
从源码中可以看到,@RequestBody 用在方法参数上面,用来将请求参数绑定到request body中,通过封装为具体的JavaBean。通俗点讲就是你在一个参数上加上该注解,spring就会将request body中的json/xml对象解析成该参数类型的Javabean对象。作为RESTful开发中经常用到的注解,研究其原理有利于我们更好地理解并掌握它。那么spring是如何做到这一点的呢?先来看DispatcherServlet。作为springMVC处理请求的中央调度器,Dispatc转载 2023-08-23 17:44:49 · 463 阅读 · 0 评论 -
SpringBoot 嵌入式容器原理与配置说明
在 springboot1.x 版本中,通過來定製嵌入式的servlet容器,如下所示。//匯入BeanPostProcessorsRegistrar:給容器中匯入一些元件//匯入了EmbeddedServletContainerCustomizerBeanPostProcessor//後置處理器:bean初始化前後(建立完物件,還沒賦值賦值)執行初始化工作@ConditionalOnClass({ Servlet.class, Tomcat.class })//判斷當前是否引入了Tomcat依賴;原创 2023-08-21 17:34:47 · 307 阅读 · 0 评论 -
[SpringBoot源码剖析-DispatchServlet] 自动配置SpringMVC
ConditionalOnClass指明了当ServletRegistration这个类存在的时候才会触发解析,生成的DispatcherServlet才能注册到ServletContext中。同样的,@Conditional有一个前置判断,DispatcherServletRegistrationCondition主要判断了该注册类的Bean是否存在。其实仅仅引入starter是不够的,回忆一下,在一个普通的WEB项目中如何去使用SpringMVC,我们首先就是要在web.xml中配置如下配置。转载 2023-06-28 15:45:01 · 368 阅读 · 0 评论 -
SpringBoot(@ControllerAdvice) ResponseBodyAdvice接口全局统一返回控制,Api返回值是String 类型时异常
简而言之:因为API接口返回的是String类型,默认会被StringHttpMessageConverter转换器捕获(支持所有MediaType 并且 接口返回值是 String,并在RequestResponseBodyMethodProcessor#handleReturnValue,writeWithMessageConverters方法中的 canWrite 方法 进行判断通过后,加入可被选择的返回值转换器中)解决方案:在controlleradvice中增加单独处理。原创 2023-05-25 17:04:56 · 370 阅读 · 0 评论 -
Spring默认线程池SimpleAsyncTaskExecutor
SimpleAsyncTaskExecutor,不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程,没有最大线程数设置。简单的通过 synchronized 和 wati and notify 达到控制线程数量的效果,从而实现限流的策略。在Java中创建线程并不便宜,线程对象占用大量内存,在大型应用程序中,分配和取消分配许多线程对象会产生大量。这是不是和我们印象中的的线程池不一样,可以说是相悖的,完美躲过线程池优势。doExecute方法:看到这,就知道了,每次都会创建新线程去执行任务。转载 2023-05-09 17:42:46 · 553 阅读 · 0 评论 -
RequestMapping、RequestBody继承相关,推荐的FeignClient+RestController 配置
在A服务的公共模块中声明了一个FeignClient接口,然后A的业务模块Controller实现了这个接口之后,就可保证A对外提供的restapi的规范性?同时B服务如果依赖了A的公共模块,就不必要再自己写一份FeignClient接口对应A服务的restapi了,直接引用A的公共模块包含的FeignClient接口即可。这可以在服务之间的通讯接口进行规范。A 和 B服务都用了相同的接口,保证了一致性,减少开发过程中的接口调试问题使用Spring Cloud做项目的同学会使用。转载 2023-04-17 18:05:49 · 608 阅读 · 0 评论 -
springboot内置tomcat启动全流程详解及处理请求详解
springboot默认内置了tomcat容器,启动时可以直接启动内置tomcat来启动应用本文要介绍的内容有tomcat启动的全流程发起http请求后tomcat转发请求到我们的DispatcherServlet的全过程我们从源码层面从头到尾分析了一遍tomcat的启动流程和tomcat处理http请求的全过程,可以看到虽然省略了很多详细的代码,但是整体流程还是相对清晰的主要流程是1、根据配置信息启动了一个ServerSocket2、启动了多个Poller线程类来接受请求。转载 2023-02-27 14:02:17 · 1250 阅读 · 0 评论 -
@WebFilter两种使用方法和失效解决方案
在这里,构造了上文中提到的ServletContextInitializerBeans,并通过ServletContextInitializerBeans的迭代器获取了所有 ServletContextInitializer 实例,可以看到正是获取了上文中提到的sortedList。具体原因可以查看关键类:ServletContextInitializerBeans,看名字就知道,这个类收集了所有ServletContextInitializer的bean列表,而这个接口的实现。我尝试了如下几种情况。原创 2022-11-11 17:33:32 · 10613 阅读 · 1 评论 -
SpringBoot项目@Async默认线程池导致OOM问题?
SpringBoot 2.1.9 之前版本 使用@Async 不指定 Executor 会使用 SimpleAsyncTaskExecutor,任务量大会导致OOM, SpringBoot 2.1.0之后版本 引入了 TaskExecutionAutoConfiguration使用ThreadPoolTaskExecutor作为默认 Executor;当项目中有多个 Executor 实列时也会使用 SimpleAsyncTaskExecutor,导致OOM,建议@Primary指定主Bean;...转载 2022-09-01 08:47:16 · 533 阅读 · 0 评论 -
Springboot @GetMapping 自动接收对象参数源码分析
所以ServletModelAttributeMethodProcessor的解析处理其实都是依靠父类 ModelAttributeMethodProcessor 来解决的,接下来看核心的 resolveArgument 方法,看一下如何转换为 我们 Controller 中 API的入参对象的。至此,request请求中的querystring参数已通过绑定装配 变成了 API 的入参对象,后续进行实际的方法调用。偶然发现这样也可以接收对象类型的入参,代码如下。原创 2022-08-19 16:16:27 · 3487 阅读 · 1 评论 -
SpringBoot Cors配置+原理分析(corsfilter)
(951条消息) 跨域的那些事 - CorsWebFilter 跨域源码分析(二)_Lewis·fk的博客-CSDN博客_corswebfilterhttps://blog.csdn.net/fk1778770286/article/details/115734587一文弄懂 CORS 跨域(前端+后端代码实例讲解) - 掘金 (juejin.cn)https://juejin.cn/post/6844904055148380173(951条消息) SpringBoot跨域设置(CORS)_骑个小蜗牛的博客原创 2022-06-24 18:07:50 · 3517 阅读 · 0 评论 -
FilterRegistrationBean的原理
目录一、注册二、流程分析1.加载ServletContextInitializer2.注册ServletContextInitializer总结一、注册二、流程分析1.加载ServletContextInitializer(1)项目中使用的服务是undertow,所以就以服务undertow为例,服务创建工厂UndertowServletWebServerFactory中的内部类Initializer,实现了ServletContainerInitializer接口,接口中就一个onS转载 2022-06-24 09:04:42 · 1553 阅读 · 0 评论 -
@EnableConfigurationProperties 注解
@EnableConfigurationProperties + @ConfigurationProperties 注解 - 阿向向 - 博客园 (cnblogs.com)https://www.cnblogs.com/d534/p/15398266.html@EnableConfigurationProperties 作用 - 简书 (jianshu.com)https://www.jianshu.com/p/b1e4f7bfc3f7作用@EnableConfigurationProperties注解原创 2022-04-15 10:18:39 · 251 阅读 · 0 评论 -
从RefreshScope实现原理看刷新配置失效问题
前言在SpringIOC中,我们熟知的BeanScope有单例(singleton)、原型(prototype), Bean的Scope影响了Bean的创建方式,例如创建Scope=singleton的Bean时,IOC会保存实例在一个Map中,保证这个Bean在一个IOC上下文有且仅有一个实例。SpringCloud新增了一个refresh范围的scope,同样用了一种独特的方式改变了Bean的创建方式,使得其可以通过外部化配置(.properties)的刷新,在应用不需要重启的情况下热加载新的外部化转载 2022-03-22 14:54:11 · 3541 阅读 · 0 评论 -
SpringBoot+Nacos:@RefreshScope自动刷新原理
@RefreshScope的作用经过@RefreshScope注解修饰的bean,将被RefreshScope进行代理,用来实现配置、实例热加载,即当配置变更时可以在不重启应用的前提下刷新bean中相关的属性值。@RefreshScope注解@RefreshScope的实现如下,非常简单,最主要是@Scope("refresh")和ScopedProxyMode.TARGET_CLASS,表示@RefreshScope 是scopeName="refresh"的 @Scope,且代理模式为TAR转载 2022-03-28 20:16:48 · 7787 阅读 · 1 评论 -
Springboot-整合多数据源配置 & AbstractRoutingDataSource详解,分析多数据源切换原理
简介主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。一、表结构在本地新建两个数据库,名称分别为db1和db2,新建一张user表,表结构如下:SQL代码:CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(25) NOT NULL C转载 2021-08-11 10:12:32 · 1208 阅读 · 0 评论 -
SpringBoot @Scheduled使用注意与原理 及 解决多定时任务不执行的问题
1、https://my.oschina.net/u/2474629/blog/46002292、https://blog.csdn.net/liaoyi9203/article/details/1098429253、https://blog.csdn.net/weixin_34327761/article/details/920139454、https://blog.csdn.net/qq_34730511/article/details/113972051简介之前使用@Sche.转载 2021-04-09 12:58:09 · 9519 阅读 · 1 评论 -
【springboot自动装配】为何不使用@EnableTransactionManagement就能使用事务?
前言:在Springboot项目开发时,假如:公司项目比较多,从事开发的同学也会相应的比较多,如果公司没有统一的开发规范,我们使用的技术就会花里胡哨,不知道看到本篇博客的您,是否有所感想,比如????下面这个案例:package com.zcw;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import转载 2021-03-10 13:35:15 · 518 阅读 · 1 评论 -
@Configuration(proxyBeanMethods = false) 详解
https://blog.csdn.net/yunxing323/article/details/108655250https://fangshixiang.blog.csdn.net/article/details/1061274181. Full 模式 Lite 模式proxyBeanMethods = true 或不写,是Full模式proxyBeanMethods = false 是lite模式不带@Configuration的类叫Lite配置类ConfigurationCl转载 2020-11-06 16:00:33 · 8882 阅读 · 0 评论 -
Springboot RabbitMq源码解析
Springboot RabbitMq源码解析之配置类Springboot RabbitMq源码解析之消息发送Springboot RabbitMq源码解析之消费者容器SimpleMessageListenerContainerSpringboot RabbitMq源码解析之consumer管理和AmqpEventSpringboot RabbitMq源码解析之RabbitListener注解...转载 2020-10-29 21:11:52 · 763 阅读 · 0 评论 -
深入理解 spring-kafka 监听器创建与运行以及消息处理流程
1. 前言好久没有写博客了,正好最近在工作的时候,使用 spring-kafka 消费消息时候遇到一个关于批量消息处理的问题,通过阅读 spring-kafka 源码,才理解产生问题的原因,以及解决方法。2. 背景最近在开发一个需求中,有一个场景是需要接受第三方公司数据回调,我们系统需要提供一个接口接受和处理数据。这个接口处理的业务逻辑比较复杂,耗时比较长,为了不让调用方等待接口调用过长时间,考虑采用将数据发送到 kafka,然后异步监听消费这个数据。这样接口只负责将数据发送到kafka,然后就转载 2020-10-27 21:24:49 · 8068 阅读 · 2 评论 -
Springboot之additional-spring-configuration-metadata.json自定义提示
简介additional-spring-configuration-metadata.json、spring-configuration-metadata.json在springboot-starter官方项目或第三方starter项目中随处可见,那它起的作用是什么?让我们一起探讨一下。官方文章官方一篇文章很详细讲解了Configuration Metadata的作用。有兴趣的小伙伴可以查看下(配置元数据)。Configuration MetadataAppendix B. Conf转载 2020-10-09 22:11:36 · 13658 阅读 · 1 评论 -
springboot启动时是如何加载配置文件application.yml文件
https://blog.csdn.net/chengkui1990/article/details/79866499https://blog.csdn.net/qq_41688840/article/details/106919243转载 2020-10-08 19:33:45 · 859 阅读 · 0 评论 -
Spring Boot 核心配置文件 bootstrap & application yml详解
用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件bootstrap (.yml 或者 .properties) application (.yml 或者 .properties)为什么会有这两种配置文件呢?大家都清楚它们的区别和具体使用场景吗?bootstrap/ application 的区别特意去翻了下 Spring Boot 的官方文档,没有找到关于这两种文件的具体定义,然后再翻了下 Spring Cloud 的官方文档找到了它们的区别。htt转载 2020-10-08 18:59:12 · 2063 阅读 · 1 评论 -
@Bean注解注入在 @Configuration和@Component 注解下的区别
https://blog.csdn.net/long476964/article/details/80626930https://blog.csdn.net/isea533/article/details/78072133区别就是 cglib代理调用方法时重写成从spring上下文获取bean,可以保证单利。component就是new 个新对象原创 2020-10-07 09:21:46 · 805 阅读 · 0 评论 -
SpringBoot-application配置和profile隔离配置
前言 github:https://github.com/vergilyn/SpringBootDemo 说明:我代码的结构是用profile来区分/激活要加载的配置,从而在一个project中写各种spring boot的demo。所以很多时候可能在*Application.class中指定了特殊的profile。 这种方式可能很糟糕(在细看理解application.properties的加载顺序后,感觉在*Application.class目录下写application.pro...转载 2020-10-03 21:09:11 · 2016 阅读 · 0 评论 -
SpringBoot配置外部Tomcat项目启动demo& 流程源码分析(长文),包含servlet、filter添加原理
本篇博文是SpringBoot配置外部Tomcat并打war包姊妹篇。【3】SpringBoot 使用外部Tomcat启动原理① 首先看Servlet3.0中的规范javax.servlet.ServletContainerInitializer(其是一个接口) 类是通过JAR服务API查找的。对于每个应用程序,ServletContainerInitializer的一个实例是由容器在应用程序启动时创建。 提供servletcontainerinitializer实现的框架必须将名为javax转载 2020-09-16 21:44:22 · 889 阅读 · 0 评论 -
SpringBoot如何添加servlet、filter源码解析
https://www.cnblogs.com/java-chen-hao/archive/2004/01/13/11837057.htmlhttps://www.cnblogs.com/java-chen-hao/archive/2004/01/13/11842611.html转载 2020-09-16 21:31:21 · 585 阅读 · 0 评论 -
Boot-Servlet注册原理-ServletContainerInitializer、WebApplicationInitializer、ServletContextInitializer
ServletContainerInitializer、WebApplicationInitializer、ServletContextInitializer有什么区别原文链接:https://uhfun.cn/tech/2020/05/22/ServletContainerInitializer-SpringServletContainerInitializer-WebApplicationInitializer-SpringBootServletInitializer-ServletContext.转载 2020-09-16 21:15:55 · 837 阅读 · 0 评论 -
SpringBoot系列——WebMvcConfigurer介绍
为什么要使用WebMvcConfigurer?WebMvcConfigurer是一个接口,提供很多自定义的拦截器,例如跨域设置、类型转化器等等。可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用。由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容。WebMvcConfigurer方法介绍由于内容太多,只展示3个关键的接口,用的比较少的,只是阐述下含义转载 2020-09-15 20:34:14 · 1619 阅读 · 0 评论 -
SpringBoot 覆盖messageConverter,使用fastjson
@SpringBootApplication@MapperScan("com.springboot.mapper")public class Application implements WebMvcConfigurer { public static void main(String[] args) { SpringApplication.run(Application.class, args); } /** * 方法一、覆盖方法configureM.转载 2020-09-14 21:49:34 · 2638 阅读 · 0 评论 -
SpringBoot中SpringMvc自动配置原理及流程
@EnableWebMvc和WebMvcConfigurer 相关资料可查看,本文只用来记录整个自动加载流程https://blog.csdn.net/z69183787/article/details/108587150https://blog.csdn.net/z69183787/article/details/108587048前文提要:springboot中的自动配置原理就不再赘述了,入口是spring.factories中的自动配置类# Auto Configureorg.原创 2020-09-14 21:06:41 · 707 阅读 · 0 评论 -
Spring注解@EnableWebMvc使用坑点解析
通过注解的方式来进行Spring4 MVC开发时,我们都会在配置文件中加入<mvc:annotation-driven/>标签,这个配置会自动注册了一个 RequestMappingHandlerMapping、一个RequestMappingHandlerAdapter、以及一个ExceptionHandlerExceptionResolver 以支持使用注解Controller的注解方法(如@RequestMapping、@ExceptionHandler)来处理request,并开启一系列转载 2020-09-14 20:21:02 · 1057 阅读 · 0 评论 -
原理:WebMvcConfigurer 与 WebMvcConfigurationSupport避坑指南
我们知道,在Spring Boot 2.0后用自己的的配置类继承WebMvcConfigurerAdapter时,idea会提示这个类已经过时了。通常情况下我们会采用下面两种代替方案:实现WebMvcConfigurer 继承WebMvcConfigurationSupport但是继承WebMvcConfigurationSupport时发现会造成一些问题在这之前,我们先看一下WebMvc自动配置类WebMvcAutoConfiguration的定义:注意红框圈起来到这个关键语句.转载 2020-09-14 20:19:38 · 3164 阅读 · 1 评论 -
Spring的@Bean只能放在@Configuration里面吗?
首先来看几个问题:- 1.@Bean方法只能定义在@Configuration里面吗?- 2.@Bean方法定义在@Configuration里面和定义在@Component里面有啥区别?- 3.@Bean方法可以是private static的吗?- 4.@Bean方法啥时候必须得定义成static的?先说一下答案:只要是@Component注解修饰的类里面都可以定义@Bean,并且都可以注册到Spring容器里面。其实不仅仅是@Component,只要是被@Component修饰的注原创 2020-08-19 17:09:54 · 2216 阅读 · 1 评论 -
Spring-Retry重试实现原理
https://albenw.github.io/posts/69a9647f/转载 2020-06-20 23:32:31 · 718 阅读 · 1 评论 -
Springboot - web环境的推断
Web environment下边这段话引用自官方文档SpringApplication会尝试帮你创建正确的ApplicationContext,默认情况下会使用AnnotationConfigApplicationContext或者 AnnotationConfigEmbeddedWebApplicationContext,这取决于你开发的是否是web应用程序。判断Web environment算法是非常简单的(基于某些类的存在与否),如果有需要的话,你可以通过setWebEnvironment转载 2020-05-31 19:18:01 · 848 阅读 · 0 评论 -
Spring boot中servlet启动原理
启动过程及原理1 spring boot 应用启动运行run方法StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; FailureAnalyzers analyzers = null; configureHeadlessProperty(); SpringAppl转载 2020-05-31 19:12:15 · 713 阅读 · 0 评论 -
关于@webFilter使用@Order无效问题
正确设置排序方式利用FilterRegistrationBean可以设置排序顺序。那是否还有其他方式呢。有的,只是这种方案不是很优雅。这里简单说明下。先说结论:可以通过过滤器的类名进行约定排序。浅谈ServletComponentScan注解的启动方式既然遇到了,那就简单分析下使用@WebFilter和@ServletComponentScan的启动方式吧。首先我们来看下,注解@ServletComponentScan(删除了相关注解):@Target(ElementTyp转载 2020-05-25 18:48:47 · 1380 阅读 · 0 评论