springboot相关的一些知识
SpringBoot可以同时处理多少请求
SpringBoot默认的内嵌容器是Tomcat,所以SpringBoot可以同时处理多少请求取决于Tomcat。
SpringBoot中处理请求数量相关的参数有四个:
- server.tomcat.thread.min-spare:最少的工作线程数,默认大小是10。
- server.tomcat.thread.max:最大的工作线程数,默认大小是200。
- server.tomcat.max-connection:最大连接数,默认大小是8192。
- server.tomcat.accept-count:等待队列的昌都强,默认大小是100。
可根据实际需求调整这四个参数。
SpringBoot为什么要禁止循环依赖?
Spring的循环依赖是通过三级缓存实现的,非常复杂。就本身而言,对象之间的相互依赖就是一种不合理的设计,SpringBoot为了避免开发者使用这种不合理的设计,所以禁止了循环依赖。
在SpringBoot 2.6.0版本禁止循环依赖,但是可以通过配置的方式重新开启循环依赖。
Spring:main:allow-circular-refences: true
SpringBoot如何自定义Stater
-
创建项目:首先创建一个普通的maven项目,并且在pom文件中引入spring-boot-autoconfigure依赖,此依赖为SpringBoot自动配置机制的核心。
-
若是自定义的start涉及到属性的配置,也就是需要在YML中配置属性,则可以引入如下依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version> <!-- 使用Spring Boot的最新稳定版 --><relativePath/> <!-- 查找父POM的位置 --></parent><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><!--此依赖可以使得自定义的属性可以在yml界面有提示--><optional>true</optional></dependency>
-
创建自定义starter的核心:自动配置类。该类可以自动完成Bean的注册, 它通常使用
@Configuration
、@EnableAutoConfiguration
和@ComponentScan
。package com.zxw.test;@Configuration @ConditionalOnClass(value = {HelloService.class}) @EnableConfigurationProperties(value = HelloProperties.class) public class HelloAutoConfiguration {@Autowiredprivate HelloProperties helloProperties;@Bean@ConditionalOnMissingBean(HelloService.class)public HelloService helloService() {HelloService helloService = new HelloService();helloService.setName(helloProperties.getName());return helloService;}}
-
创建属性配置类: 通常,自动配置类会配合一个属性配置类,使用
@ConfigurationProperties
注解来绑定配置文件中的属性。package com.zxw.test;@ConfigurationProperties(prefix = "hello-stater")//prefix属性配置的值为yml配置文件中配置属性的前缀。例如该条属性需配置则是 hello-stater.name="xxx" public class HelloProperties {private static final String DEFAULT_NAME = "helloWorld";private String name = DEFAULT_NAME;public String getName() {return name;}public void setName(String name) {this.name = name;}
-
创建业务类:该类一般用于定义该Start的主要功能
package com.zxw.test; public class HelloService {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public String hello(){return "hello,"+this.name;} }
-
更新
spring.factories
文件: 在src/main/resources/META-INF/spring.factories
文件中,添加你的自动配置类,以便Spring Boot能够发现它们。 (注意前缀必须为“org.springframework.boot.autoconfigure.EnableAutoConfiguration”)org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.zxw.config.HelloAutoConfiguration
SpringBoot的启动原理
- 运行Main方法:应用程序的启动始于Main方法的执行。在Main方法中,首先创建了一个Application的示例,用于调用Application的run方法。创建实例的过程中,会确定应用程序的类型,并且根据spring.factories文件加载所有的初始化器以及监听器。最后设置Main方法存在的类为主类。
- run()方法:run方法是SpringBoot程序启动的入口,以下是run方法的主要步骤:
- 首先run方法会通过prepareEnviroment方法读取和解析环境变量、配置文件(application.yml或者是application.properties)等,获取应用程序的配置信息。
- **之后会创建ApplicationContext(spring应用上下文):**springboot通过createApplicationContext更具应用程序的类型(如web类型)创建不同的ApplicationContext。web应用程序通常创建的是ServletWebServerApplicationContext.
- **预初始化上下文:**调用prepareContext()方法,进行预初始化上下文。其中会调用new Application中设置的初始化器进行初始化。并且会将SpringBoot启动类作为配置类,读取并注册BeanDefinition,使Spring容器可以识别应用程序的配置。
- **调用refresh:**通过调用此方法来加载和初始化Spring容器。这一过程会执行一系列操作,包括解析@Import注解以加载自动配置类,创建和注册BeanDefinition等。并且SpringBoot会在此方法中创建内置的Servlet容器。
- **监听器和扩展点:**在整个启动过程中,SpringBoot会调用各种监听器和扩展点,这些组件可以用来对应用程序进行扩展和定制。
SpringBoot内置Tomcat启动流程
SpringBoot内置Tomcat启动流程要从main函数入手,而main函数中的run()方法实际上是调用SpringApplication的run()方法。在run()方法中,先创建一个ConfigurableApplicationContext对象,通过createApplicationContext()对象进行创建,这个对象实际上就是JavaWeb的Applicationcontext对象。然后调用refreshcontext0)方法,在该方法中,又调用了refresh()方法,此方法中定义了Tomca创建流程,调用ServletWebServerApplicationcontext的onRefresh()方法,在该方法中调用了createWebsever)方法,在该方法中先获取ServletWebServerFactory,再根据工厂获取具体的webServer,此时获取的是TomcatServletWebServerFacotry这个工厂,然后在getWebServer0)方法中,创建Tomcat的一些核心组件,然后调用getTomcatWebServer)方法,进行初始化Tomcat,最后调用refresh()中的finishRefresh()方法,该方法被ServletWebServerApplicatonContext子类重写,在该方法中调用start()方法将Tomcat启动。
springBoot的jar包为什么可以直接运行?
- SpringBoot提供Maven插件(spring-boot-maven-plugin),用于将应用程序打包为可执行的Jar文件。通过执行mvn clean package等命令,可轻松生成可执行jar包。
- 打包生成的jar包通常是“fat jar”或“uber jar”,这意味着它包含了应用程序的所有依赖项。包含第三方库和SpringBoot框架本身。这样Jar文件就成为了一个自包含的单一文件。
- Jar文件包含一个MANIFEST.MF的清单文件,其中包含了Jar文件的元数据信息。其中最重要的是Main-class,它制定了启动应用程序的主类。
- springboot的可执行Jar文件通常由JarLauncher类启动。JarLauncher负责创建一个类加载器(LaunchedURLClassLoader),加载boot-lib目录下的Jar文件。包括SpringBoot的相关类。然后再一个新的线程中启动应用程序的Main方法,实现应用程序的启动。
- 当执行Main方法最终会加载Spring容器、进而创建内嵌的Tomact进行阻塞线程使我们Jar包完成web应用的启动。
SpringBoot的自动配置原理
- 引入@EnableAutoConfiguration:在SpringBoot的启动类上 会有@SpringBootApplication注解,该注解为一个复合注解,包含了@EnableAutoConfiguration注解,该注解标识了开启自动配置功能。
- @EnableAutoConfiguration注解引用了@Import注解,该注解的作用为导入一个实现了ImportSelector接口的类AutoConfigurationImportSelector 。该类用来决定哪些自动配置类应该被添加到Spring应用上下文中 。并且该类间接的包含了一个deferreImportSelector,用于确保SpringBoot的自动配置类在最后加载,以方便扩展和覆盖。当Spring容器启动的时候会解析@Import注解并加载相应的配置。
- 读取 META-INF/spring.factories 文件:SpringBoot通过SPI机制读取类路径下的 META-INF/spring.factories 文件,该文件包含了各种自动配置类的配置。
- 过滤出AutoConfigurationClass:从spring.factories 文件中,过滤出所有AutoConfigurationClass类型的类,这些类包含了自动配置的具体实现。
- 条件化加载:最后SpringBoot会根据条件(@ConditionalXXX注解)来排除包含特定功能的自动配置类。这些条件会根据应用程序的环境和配置动态生效。
总结起来,Spring Boot的自动配置原理是通过@EnableAutoConfiguration注解引入自动配置逻辑,然后解析@lmport注解,加载各种配置类,包括deferredlmportSelector和自动配置类。通过SPI机制读取spring.factories文件,过滤出自动配置类,并根据条件化配置来动态加载这些类,从而实现自动配置的功能。这种机制使得Spring Boot应用程序可以根据环境和需求自动配置,极大地简化了开发和部署的工作。
SpringBoot和Spring的关系和区别
关系:
- Spring是框架 而SpringBoot是脚手架:Spring是一个Java应用程序框架,旨在帮助开发人员构建各种类型的应用程序,包括web应用、企业级应用等。Spring提供了大量的组件和功能,但需要开发人员进行详细配置和集成。SpringBoot则是一个脚手架工具,基于Spring框架,旨在简化Spring应用程序的初始化配置和开发过程,采用自动化配置和约定大于配置的特性。
- SpringBoot构建在Spring之上:SpringBoot不是一个框架而是建立在Spring之上的工具。使用了Spring的核心功能,如依赖注入、面向切面编程、事务管理等。因此SpringBoot狂热一充分利用Spring框架的功能,并且更容易启动和运行。
区别:
- 配置方式:Spring的配置通常需要大量的XML配置文件或者是JAVA注解。相比之下SpringBoot采用“约定大于配置”的原则,大部分配置都可以通过默认值和自动配置来完成,从而减少了配置的复杂性。
- 开发速度:SpringBoot降低了学习曲线,提供了内置的Starter和自动配置,使得开发更加快速和高校。而Spring更多的是使用手动配置。
- 内置web容器:SpringBoot内置了多个内嵌式的web容器,可以轻松创建独立可执行的JAR文件或者是WAR文件,而不需要外部web服务器。Spring通常需要外部web服务器的部署。
总的来说,Spring是一个全功能的Java应用程序框架,而Spring Boot是一个用于简化Spring应用程序开发的工具。Spring Boot通过自动化配置、约定优于配置的原则、内置Web容器等功能,使得开发和部署Spring应用程序变得更加快速和便捷,特别适用于微服务和快速原型开发。开发人员可以根据项目的需求选择使用Spring框架、Spring Boot,或两者结合使用。
对SpringBoot的理解
- 内置Starter和自动配置:Spring Boot提供丰富的内置Starter,这些Starter是预定义的依赖集合,可以轻松集成各种主流框架技术。同时,Spring Boot通过自动配置大大减少了繁琐的配置工作,让开发人员可以直接开箱即用。
- **零XML配置:**Spring Boot采用JavaConfig的方式进行开发,不需要编写大量的XML配置文件。这种开发方式让开发更加简洁和可读,同时提高了可维护性。
- **内置web容器:**SpringBoot内置了多个内嵌式的web容器,可以轻松创建独立可执行的JAR文件或者是WAR文件,而不需要外部web服务器,简化了部署过程。
- **微服务的支持:**SpringBoot和SpringCloud结合使用,可以轻松快速的构建和部署微服务架构。
- 依赖版本管理:SpringBoot帮助开发人员管理了常用的第三方依赖版本,防止出现版本冲突问题。
- 监控管理:SpringBoot自带了监控功能,包括应用程序状况监控、内存使用情况监控、线程池状态、HTTP请求统计等。除此之外,SpringBoot还提供了优雅关闭程序的方式,使得应用程序管理更加便捷。
总的来说,Spring Boot旨在提供一个快速、高效、开箱即用的开发环境,使开发人员能够更加专注于业务逻辑的实现而不必花费太多时间在繁琐的配置和集成上。它的设计理念是"约定优于配置",通过合理的默认配置和内置功能,让开发变得更加简单和愉快。
相关文章:
springboot相关的一些知识
SpringBoot可以同时处理多少请求 SpringBoot默认的内嵌容器是Tomcat,所以SpringBoot可以同时处理多少请求取决于Tomcat。 SpringBoot中处理请求数量相关的参数有四个: server.tomcat.thread.min-spare:最少的工作线程数,默认大小…...
DP:完全背包+多重背包问题
完全背包和01背包的区别就是:可以多次选 一、完全背包(模版) 【模板】完全背包_牛客题霸_牛客网 #include <iostream> #include<string.h> using namespace std; const int N1001; int n,V,w[N],v[N],dp[N][N]; //dp[i][j]表示…...
购物返利系统的安全性:防范欺诈与数据保护
购物返利系统的安全性:防范欺诈与数据保护 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 购物返利系统作为一种电子商务模式,通过向消…...
从WebM到MP3:利用Python和wxPython提取音乐的魔法
前言 有没有遇到过这样的问题:你有一个包含多首歌曲的WebM视频文件,但你只想提取其中的每一首歌曲,并将它们保存为单独的MP3文件?这听起来可能有些复杂,但借助Python和几个强大的库,这个任务变得异常简单。…...
图片转pdf,图片转pdf在线转换,在线图片转pdf
图片转PDF,听起来似乎是一个简单的操作,但实际上,它涉及到许多细节和技巧。有时候我们需要将图片转换为PDF格式,以便于分享、打印或保存。那么,如何将图片转换成PDF呢?接下来,我将为您详细介绍几…...
SpringBoot3使用Swagger3
SpringBoot3使用Swagger3 项目中的后端接口进行简单的前端展示一、依赖引入二、快速启动1.在application.yml中配置2.或者properties文件,则配置3.启动项目访问swagger 三、使用注解标注接口Swagger配置文件Swagger 注解迁移举例五种常用ApiApiOperationApiImplicitParamApiMod…...
【51单片机基础教程】点亮led
文章目录 前言51单片机点亮LED的原理硬件部分软件部分51单片机的寄存器编程步骤proteus仿真点亮一个led 点亮多个ledproteus仿真代码 流水灯 总结 前言 单片机(Microcontroller Unit, MCU)是一种集成电路,广泛应用于各种电子产品中。作为嵌入…...
Docker之overlay2的迁移
原因 docker默认将文件及其容器放置在了系统盘的挂载区内,如果长期使用会发现系统挂载区被overlay2挤爆了,因此在一开始我们将其迁移在大容量外挂磁盘上,就可以避免系统盘被挤爆,放心使用. 具体操作 # 停止容器 systemctl stop docker# 修改容器配置,…...
CentOS中的rename命令
目录 CentOS中的rename命令基本语法使用示例注意事项安装prename CentOS中的rename命令 在CentOS系统中,rename命令通常是指util-linux包中提供的版本,它用于批量重命名文件,但与Perl版本的rename命令相比,功能较为简单ÿ…...
redis.conf 参数详解,方便进行性能优化配置
以下是redis.conf中一些常见参数的详细说明: daemonize:是否以后台进程运行,默认为no; pidfile:如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid;bind:绑定主…...
微信小程序登录流程详情及Java代码
一、流程图 说明: 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。 获取手机号,调用wx.getPhoneNumber() ,获取加密…...
c++qt合并两张灰度图像
需求:将两张尺寸相同的灰度图像进行合并,合并后的图像,每个像素点灰度值为两张原图对应像素点灰度值之和。若超过255,则最大为255。 方法一: 将图像读取为cv::Mat,再调用opencv的cv::add方法,进…...
Uniapp通过年月日时间转变星期格式
效果图 参靠微信小程序:日常记一记 代码 <view v-for"(d,index) in dataList" >{{getWeekDay(d.ctime)}} //时间格式:2024-06-21</view> js export default {data(){return {dataList:[],//时间数组}},onLoad() {this.loadList…...
如何编写和执行高效的测试计划
如何编写和执行高效的测试计划 1. 测试计划概述2. 测试阶段详解3. 测试计划模板4. 关键注意事项总结 1. 测试计划概述 测试计划是指导整个测试过程的重要文档,其中包含了测试策略、资源分配、进度安排以及风险评估等内容。 一个完善的测试计划应当包括以下几个主要…...
【MySQL连接器(Python)指南】03-MySQL连接器(Python)安装
文章目录 前言1. 从二进制发行版中安装连接器1.1 使用pip安装MySQL连接器1.2 使用MySQL Yum Repository安装1.3 使用Debian软件包安装连接器2. 从源代码发行版安装连接器2.1 在Windows上源码安装2.2 在类Unix系统上源码安装3. 验证连接器安装总结前言 MySQL连接器(Python),用于…...
Spring Boot组件化与参数校验
Spring Boot组件化与参数校验 Spring Boot版本选择 2.3.x版本 2.6.x版本 Spring Boot核心思想 约定大于配置,简化繁琐的配置 Spring Boot自动配置原理 SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,Spr…...
实现可扩展的电商返利平台:技术选型与挑战
实现可扩展的电商返利平台:技术选型与挑战 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在当今数字化和电商兴盛的时代,返利平台成为…...
从0开始C++(三):构造函数与析构函数详解
目录 构造函数 构造函数的基本使用 构造函数也支持函数重载 构造函数也支持函数参数默认值 构造初始化列表 拷贝构造函数 浅拷贝和深拷贝 析构函数 总结 练习一下ヽ( ̄▽ ̄)ノ 构造函数 构造函数的基本使用 构造函数是一种特殊的成…...
行车记录仪文件夹“0字节”现象解析与恢复策略
一、行车记录仪文件夹“0字节”现象描述 行车记录仪作为现代驾驶中的必备设备,其储存的视频数据对于事故记录和取证至关重要。然而,有时车主们可能会遇到这样一个问题:行车记录仪的某个文件夹内的文件突然变成了0字节大小,无法正…...
呼叫中心系统的功能都有哪些?okcc呼叫中心pscc磐石云呼叫系统部署
当前电话营销普及到各行各业,方便快捷成了大部分企业在宣传自己公司的产品时必用的一种营销方式,但是电话营销在管理上也存在许多问题。例如:销售员与客户沟通前,未能详细了解客户的资料;多名销售员重复拨打同一个客户…...
2024.06.08校招 实习 内推 面经
绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、提前批 | 中电锦江2025届提前批招聘 提前批 | 中电锦江2025届提前批招聘 2、实习 | 国电电力2025届暑期实习生计划启动! 实习 | 国电电力2025届暑期实习生计划启动&#x…...
Polyplus——转染试剂专业供应商
PolyPlus-transfection是一家专业的转染试剂研发和生产的生物技术公司,拥有20年的的转染试剂研发经验,通过创新的核酸转染解决方案支持基因和细胞治疗、生物制剂制造和生命科学研究。目前已经通过了ISO 9001: 2000质量体系认证,已经开发了一系…...
微服务架构-线上治理、线下治理与架构演进
目录 一、线上治理 1.1 概述 1.2 线上预案体系 1.2.1 概述 1.2.2 变更引起的故障 1.2.3 流量和容量变化引起的故障 1.2.4 依赖故障 1.2.5 机房、网络等硬件和环境故障 1.2.6 其他 1.2.7 故障的场景化 1.3 基于Metric的预案自动触发 1.4 治理参数动态调整 1.4.1 举例…...
网络安全:什么是SQL注入
文章目录 网络安全:什么是SQL注入引言SQL注入简介工作原理示例代码 攻击类型为什么SQL注入危险结语 网络安全:什么是SQL注入 引言 在数字化时代,数据安全成为了企业和个人最关心的问题之一。SQL注入(SQL Injection)是…...
从零开始精通Onvif之网络配置
💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 概述 网络配置是Onvif规范中的重要组成部分,允许用户通过网络远程配置和管理设备的网络设置,比如:DHCP、IP地…...
在 macOS 上使用 Homebrew 安装和配置 Python 及 Tk 库
在 macOS 上,系统自带的 /usr/bin/python3 版本较旧,且直接升级系统自带的 Python 版本可能会影响系统稳定性。因此,推荐使用 Homebrew 来安装和管理 Python 及其相关库。本文将详细介绍如何通过 Homebrew 安装和配置 Python 3 及 Tk 库&…...
【机器学习 复习】第2章 线性回归及最大熵模型
一、概念 1.回归就是用一条曲线对数据点进行拟合,该曲线称为最佳拟合曲线,这个拟合过程称为回归。 2.一个自变量 叫 一元线性回归,大于一个自变量 叫 多元线性回归。 (1)多元回归:两个x,一个…...
关于椭圆的方程(有Python画的动图)
关于椭圆的方程(有Python画的动图) flyfish 几何定义 椭圆是平面上所有到两个固定点(焦点)的距离之和为常数的点的集合。这两个固定点叫做焦点。 解析几何描述 设椭圆的两个焦点为 F 1 F_1 F1 和 F 2 F_2 F2ÿ…...
selenium常见难点解决方案
勾选框勾选问题 勾选框代码逻辑实现过程: 第一步:首先找到勾选框的元素; 第二步:检查它是否已经被勾选。如果已经勾选,则进行取消勾选操作;如果未勾选,则进行点击勾选操作; 以下是一…...
【Python高级编程】 综合练习-使用OpenCV 进行视频数据处理
综合练习 读取一个视频文件,对其进行处理后保存为一个新的视频文件。具体的处理步骤包括调整帧大小、转换为灰度图像、垂直翻转画面以及添加高斯噪声。 下面是代码的详细实现: import cv2 import numpy as np# 定义一个函数,用来给图像添加…...
北京单页营销型网站/品牌运营推广方案
我正在用PHP编写一个基本的莫尔斯代码转换器,它可以接受一个字符串并将其转换为莫尔斯代码.它使用了一个关联数组,一个foreach循环和一个for循环.它有效,除了某些原因它在每个转换后的字符后输出等效于’0’的莫尔斯码.我无法弄清楚0的来源.如果我从关联数组中删除0,没有问题,但…...
网站建设和连接器区公司名字/北京网站托管
题目:绝对值排序 输入 n(n≤100) 个整数,按照绝对值从大到小排序后输出。题目保证所有的数的绝对值都不相等。 输入格式: 第一个数字为 n接着是 n个整数。输出格式: 输出这 n个整数排序后的结果。Sample Input 3 3 -4 2Sampl…...
网站策划 要求/长沙百度开户
堆是堆(heap),栈是栈(stack),堆栈是栈。栈中分配的是基本类型和自定义对象的引用。堆中分配的是对象,也就是new出来的东西。 被所有线程共享。方法区/静态区 存放的是类信息和static变量、常量。 被所有线程共享。也可以…...
做网站zwnet/it教育培训机构
定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。类型:行为类模式类图:在软件系统中经常会有这样的需求:如果一个对象的状态发生改变…...
政府单位网站建设/拍照搜索百度识图
奇异递归模板简介 奇异递归模板是模板的一种使用技巧,通常这种技巧和一种叫做静态多态特性一起出现。是一种继承时将子类型作为模板参数传给基类的一种模板使用方法。 奇异递归模板应用 对象计数 有时我们可能会需要对一些类型的对象计数,通常我们是…...
做网站的故意给中病毒/软文推广的优点
文章目录MyBatis-Plus特性快速开始项目整体目录结构数据库准备配置文件简单CRUD通用service源码下载MyBatis-Plus 官网 个人白话解释:简单的CRUD直接通过方法调用,无需多写接口和xml,像jpa那样调用 愿景 我们的愿景是成为 MyBatis 最好的搭档…...