Springboot小知识(1):启动类与配置

一、启动类(引导类)

在通常情况下,你创建的Spring应用项目都会为你自动生成一个启动类,它是这个应用的起点。
在Spring Boot中,引导类(也称为启动类,通常是main方法所在的类)是整个应用程序的入口点,用于引导和启动Spring Boot应用。它主要用来加载Spring的上下文自动配置启动内嵌的服务器


1.1 启动类重要注解

一个经典的SpringBoot启动类如下代码所示:

@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

@SpringBootApplication注解是Spring Boot启动类的核心,它包含了三个重要注解:
在这里插入图片描述

  1. @SpringBootConfiguration:这个注解实际上是@Configuration的派生注解,表示该类是一个Spring配置类,可以定义@Bean方法。Spring会将这些方法返回的对象作为Bean,添加到应用上下文中。
  2. @EnableAutoConfiguration:这是Spring Boot的自动配置核心,通过这个注解,Spring Boot会根据项目中引入的依赖,自动配置各种组件。例如,如果项目中有spring-boot-starter-web依赖,那么Spring Boot会自动配置一个Web环境,包含内嵌的Tomcat服务器、DispatcherServlet等。
  3. @ComponentScan:这个注解会扫描指定包及其子包下的所有@Component、@Service、@Repository、@Controller等注解,将它们作为Bean加载到Spring的上下文中。默认情况下,它会扫描引导类所在包及其子包,所以通常建议将引导类放在项目根包下。

1.2 SpringApplication.run的功能

在引导类中,SpringApplication.run(Application.class, args)用于启动Spring Boot应用,它执行了多项初始化工作,具体包括以下几个步骤:

  1. 初始化SpringApplication对象:SpringApplication类会根据应用的类型(通常是SpringBootServletInitializer或SpringApplication)决定启动方式。这个类会加载各类初始化器ApplicationContextInitializer和监听器ApplicationListener,同时准备一些默认设置。

  2. 启动引导和环境配置:Spring Boot会初始化Environment对象,加载系统属性、环境变量以及应用配置文件(如application.properties或application.yml),将这些内容加载到Spring上下文环境中。

  3. 创建并配置ApplicationContext:根据应用的类型选择具体的ApplicationContext类型,一般是AnnotationConfigApplicationContext或WebApplicationContext,用来管理应用中的所有Bean。

  4. 自动加载Spring Boot特性:通过@EnableAutoConfiguration,Spring Boot会扫描所有自动配置类,通常是位于META-INF/spring.factories文件中的@Configuration类,自动配置相应的组件(如数据库连接池、数据源、JPA配置等)。

  5. 启动内嵌Web服务器(如有):如果是Web应用,Spring Boot会启动一个内嵌的Web服务器(例如Tomcat或Jetty),并将DispatcherServlet等必要的组件注入到应用上下文中,使应用可以接收和处理HTTP请求。

  6. 启动ApplicationRunner和CommandLineRunner:如果应用中有实现了ApplicationRunner或CommandLineRunner接口的类,Spring Boot会在启动完成后运行这些类中的run方法。它们常用于在应用启动后执行一些初始化任务。


1.3 引导类的实际运行机制

整个引导类运行的关键在于SpringApplication.run()方法,它的运行机制大致如下:

  1. 加载监听器:Spring Boot使用各种事件来驱动应用启动流程,例如,加载ApplicationStartingEvent、ApplicationPreparedEvent等一系列事件,在应用生命周期的不同阶段进行通知。你可以创建自定义的监听器来监听这些事件。

  2. 设置默认属性:Spring Boot会根据项目结构和配置文件设置默认属性,例如端口号、环境配置、日志配置等。你可以在application.properties或application.yml中进行自定义。

  3. 创建上下文和刷新上下文:Spring Boot会创建应用的ApplicationContext,并刷新它。ApplicationContext会自动管理所有Spring组件和Bean的生命周期,注入相应依赖,并准备服务。

  4. 调用生命周期钩子和运行应用:在上下文加载完成后,Spring Boot会调用所有实现SmartLifecycle接口的组件,执行它们的启动逻辑。之后,启动内嵌的服务器,监听请求端口,应用正式启动并进入运行状态。


1.4 使用引导类的配置和扩展

你可以通过自定义SpringApplication来更细粒度地控制Spring Boot的启动行为:

  1. 设置Banner:可以通过SpringApplication.setBanner()或在application.properties中配置自定义启动Banner。
  2. 配置监听器:可以通过SpringApplication.addListeners()方法,添加自定义监听器来捕获启动过程中不同阶段的事件。
  3. 配置初始化器:通过SpringApplication.addInitializers()方法,自定义上下文的初始化行为。

可能看到这里的同学有点蒙,关于基础篇里面,我们只需要知道启动类大致干了点啥就行,究竟是怎么干的,为什么这么干的,这属于核心原理了,到时候放在原理那里讲解,上面每一个小点单独拉出来讲都要参考无数篇文献,都能写一个万字以上的论文,对于基础来讲无须理解那么多,知道有这么个东西为主。

那么现在启动main方法,同时启动了内置的服务器(核心注解中的@EnableAutoConfiguration有相关依赖的话),这样我们整个程序就运行起来了。

二、配置

2.1 application.properties

这是Spring Boot最常用的配置文件,位于src/main/resources目录下。文件名一般为
在这里插入图片描述
Spring Boot会根据这些配置文件自动加载相关属性。如果上述三个文件中关于某一项的配置全部存在(例如port),则其优先级顺序为:
在这里插入图片描述

常见配置项

服务器端口:server.port=8080(修改服务器端口)
数据源配置:

spring.datasource.url=jdbc:mysql://localhost:3306/dbname
spring.datasource.username=root
spring.datasource.password=root

日志配置:logging.level.com.example=DEBUG(设置日志级别)
邮件配置:spring.mail.host=smtp.example.com


2.2 多环境配置

Spring Boot支持根据环境自动加载不同的配置文件,例如application-dev.properties、application-prod.properties等。通过spring.profiles.active来指定当前环境:

spring.profiles.active=dev

例子如下:
在这里插入图片描述
在这里插入图片描述
他在目录中就会有两个配置文件,其中的yml可以如上图所示,在需要参数的地方以变量名称占位,在dev文件中填写具体的参数,区分开开发环境参数与运行环境参数。

yml中:

在这里插入图片描述

dev中:

在这里插入图片描述

作为配置来讲,重中之重就是:后面有一个空格,如果没有空格则配置均会失效!

2.3 读取配置文件中的参数

使用@Value(“${}”)注解即可从配置中读取参数赋值给变量,用例如下:
在这里插入图片描述

在这里插入图片描述

用例代码,这里注意括号中的变量名称需要与配置相同,但是具体的变量名不需要与配置中的变量名相同

在这里插入图片描述

输出:

在这里插入图片描述

2.4 配置文件中引用属性

在这里插入图片描述

2.5 使用类封装属性

使用:@ConfigurationProperties这个注解完成对类的封装,用例如下所示:
在这里插入图片描述

配置文件:
在这里插入图片描述
类文件:
在这里插入图片描述
输出:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球…

NLP信息抽取大总结:三大任务(带Prompt模板)

信息抽取大总结 1.NLP的信息抽取的本质?2.信息抽取三大任务?3.开放域VS限定域4.信息抽取三大范式?范式一:基于自定义规则抽取(2018年前)范式二:基于Bert下游任务建模抽取(2018年后&a…

手机中的核心SOC是什么?

大家好,我是山羊君Goat。 常常听说CPU,中央处理器等等的,它是一个电脑或单片机系统的核心,但是对于SOC可能相比于CPU了解的人没有那么广泛。 所以SOC是什么? SOC全称是System on Chip,就是片上系统&#…

网络--socket编程--基础

1、网络字节序 已知:内存中的很多数据都有大小端之分,在网络这,网络数据流也是有大小端之分的。 TCP/IP协议规定:网络数据流采用大端字节序(即低地址处放高位字节)。 因此,小端机器发送网络数据流之前,必须转为大端(一般的机器会自动转换): 在网络-本地字节序转换…

Transformers在计算机视觉领域中的应用【第1篇:ViT——Transformer杀入CV界之开山之作】

目录 1 模型结构2 模型的前向过程3 思考4 结论 论文: AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 代码:https://github.com/google-research/vision_transformer Huggingface:https://github.com/huggingf…

<数据集>路面坑洼识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:665张 标注数量(xml文件个数):665 标注数量(txt文件个数):665 标注类别数:1 标注类别名称:[pothole] 序号类别名称图片数框数1pothole6651740 使用标注工具&#x…

PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南

Qt官网参考资料: QSS介绍: Styling the Widgets Application - Qt for Pythonhttps://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgetstyling.html#tutorial-widgetstyling QSS 参考手册: Qt Style Sheets Reference | Qt Widge…

07.ES11 08.ES12

7.1、Promise.allSettled 调用 allsettled 方法&#xff0c;返回的结果始终是成功的&#xff0c;返回的是promise结果值 <script>//声明两个promise对象const p1 new Promise((resolve, reject) > {setTimeout(() > {resolve("商品数据 - 1");}, 1000)…

qt QGraphicsRotation详解

1、概述 QGraphicsRotation 是 Qt 框架中 QGraphicsTransform 的一个子类&#xff0c;它专门用于处理图形项的旋转变换。通过 QGraphicsRotation&#xff0c;你可以对 QGraphicsItem&#xff08;如形状、图片等&#xff09;进行旋转操作&#xff0c;从而创建动态和吸引人的视觉…

Unity Plane API解释

构造函数解释&#xff0c;d的解释为&#xff1a;距离是沿着平面法线从平面到原点的距离。注意&#xff0c;这意味着为正值的distance值将导致平面朝向原点。负的距离值会导致平面朝向远离原点。 试验&#xff1a; GetSide方法检测点是否位于平面的正向侧&#xff0c;结果显示…

通讯专题4.1——CAN通信之计算机网络与现场总线

从通讯专题4开始&#xff0c;来学习CAN总线的内容。 为了更好的学习CAN&#xff0c;先从计算机网络与现场总线开始了解。 1 计算机网络体系的结构 在我们生活当中&#xff0c;有许多的网络&#xff0c;如交通网&#xff08;铁路、公路等&#xff09;、通信网&#xff08;电信、…

深度学习模型:LSTM (Long Short-Term Memory) - 长短时记忆网络详解

一、引言 在深度学习领域&#xff0c;循环神经网络&#xff08;RNN&#xff09;在处理序列数据方面具有独特的优势&#xff0c;例如语音识别、自然语言处理等任务。然而&#xff0c;传统的 RNN 在处理长序列数据时面临着严重的梯度消失问题&#xff0c;这使得网络难以学习到长…

算法笔记:力扣24. 两两交换链表中的节点

思路&#xff1a; 本题最简单的就是通过递归的形式去实现 class Solution {public ListNode swapPairs(ListNode head) {if(head null || head.next null){return head;}ListNode next head.next;head.next swapPairs(next.next);next.next head;return next;} } 对于链…

ehr系统建设方案,人力资源功能模块主要分为哪些,hrm平台实际案例源码,springboot人力资源系统,vue,JAVA语言hr系统(源码)

eHR人力资源管理系统&#xff1a;功能强大的人力资源管理工具 随着企业规模的不断扩大和业务需求的多样化&#xff0c;传统的人力资源管理模式已无法满足现代企业的需求。eHR人力资源管理系统作为一种先进的管理工具&#xff0c;能够为企业提供高效、准确、实时的人力资源管理。…

【Android】从事件分发开始:原理解析如何解决滑动冲突

【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始&#xff1a;原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争&#xff0c;滑动冲突…

OGRE 3D----2. QGRE + QQuickView

将 OGRE(面向对象图形渲染引擎)集成到使用 QQuickView 的 Qt Quick 应用程序中,可以在现代灵活的 UI 框架中提供强大的 3D 渲染功能。本文将指导您如何在 QQuickView 环境中设置 OGRE。 前提条件 在开始之前,请确保您已安装以下内容: Qt(版本 5.15 )OGRE(版本14.2.5)…

GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记

1 Overall GAGAvatar&#xff08;Generalizable and Animatable Gaussian Avatar&#xff09;&#xff0c;一种面向单张图片驱动的可动画化头部头像重建的方法&#xff0c;解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性&#xff1a; 基于NeRF的方…

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…

预训练模型与ChatGPT:自然语言处理的革新与前景

目录 一、ChatGPT整体背景认知 &#xff08;一&#xff09;ChatGPT引起关注的原因 &#xff08;二&#xff09;与其他公司的竞争情况 二、NLP学习范式的发展 &#xff08;一&#xff09;规则和机器学习时期 &#xff08;二&#xff09;基于神经网络的监督学习时期 &…

GRAG: Graph Retrieval-Augmented Generation

GRAG: Graph Retrieval-Augmented Generation 摘要 简单检索增强生成 (Naive RAG) 聚焦于单一文档的检索&#xff0c;因此在处理网络化文档时表现不足&#xff0c;例如引用图、社交媒体和知识图谱等应用中非常常见的场景。为了解决这一限制&#xff0c;我们提出了图检索增强生…