从零开始学Spring Boot系列-SpringApplication

SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。在很多情况下, 你只需委托给 SpringApplication.run这个静态方法 :

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

当应用启动时, 你应该会看到类似下面的东西:
20240407182652
默认情况下会显示INFO级别的日志信息, 包括一些相关的启动详情, 比如启动应用的用户等。

自定义Banner

通过在classpath下添加一个banner.txt或设置banner.location来指定相应的文件可以改变启动过程中打印的banner。如果这个文件有特殊的编码,你可以使用banner.encoding设置它(默认为UTF-8)。
在banner.txt中可以使用如下的变量:

变量描述
${application.version}MANIFEST.MF中声明的应用版本号, 例如1.0
${application.formatted- version}MANIFEST.MF中声明的被格式化后的应用版本号(被括号包裹且以v作为前缀),用于显 示,例如(v1.0)
${spring-boot.version}正在使用的Spring Boot版本号, 例如3.2.3
${spring-boot.formatted-version}正在使用的Spring Boot被格式化后的版本号(被括号包裹且以v作为前缀), 用于显示,例如(v3.2.3)

**注:**如果想以编程的方式产生一个banner,可以使用SpringBootApplication.setBanner(…)方法。使用org.springframework.boot.Banner接口,实现你自己的printBanner()方法。

自定义SpringApplication

如果默认的SpringApplication不符合你的口味,你可以创建一个本地的实例并自定义它。例如,关闭banner你可以这样写:

@SpringBootApplication
public class SpringbootLearningApplication {public static void main(String[] args) {SpringApplication app =new SpringApplication(SpringbootLearningApplication.class);app.setBannerMode(Banner.Mode.OFF);app.run(args);}}

**注:**传递给SpringApplication的构造器参数是spring beans的配置源。在大多数情况下,这些将是@Configuration类的引用,但它们也可能是XML配置或要扫描包的引用。

Application事件和监听器

除了常见的Spring框架事件,比如ContextRefreshedEvent,一个SpringApplication也发送一些额外的应用事件。一些事件实际上是在ApplicationContext被创建前触发的。
你可以使用多种方式注册事件监听器,最普通的是使用SpringApplication.addListeners(…)方法。在你的应用运行时,应用事件会以下面的次序发送:

  1. 在运行开始,但除了监听器注册和初始化以外的任何处理之前,会发送一个ApplicationStartedEvent。
  2. 在Environment将被用于已知的上下文,但在上下文被创建前,会发送一个ApplicationEnvironmentPreparedEvent。
  3. 在refresh开始前,但在bean定义已被加载后,会发送一个ApplicationPreparedEvent。
  4. 启动过程中如果出现异常,会发送一个ApplicationFailedEvent。

注 :你通常不需要使用应用程序事件, 但知道它们的存在会很方便(在某些场合可能会使用到)。在Spring内部, Spring Boot使用事件处理各种各样的任务。

Web环境

一个SpringApplication将尝试为你创建正确类型的ApplicationContext。在默认情况下,使用AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext取决于你正在开发的是否是web应用。

用于确定一个web环境的算法相当简单(基于是否存在某些类)。如果需要覆盖默认行为,你可以使用setWebEnvironment(boolean webEnvironment)。通过调用setApplicationContextClass(…),你可以完全控制ApplicationContext的类型。

注: 当JUnit测试里使用SpringApplication时,调用setWebEnvironment(false)是可取的。

命令行启动器

如果你想获取原始的命令行参数,或一旦SpringApplication启动,你需要运行一些特定的代码,你可以实现CommandLineRunner接口。在所有实现该接口的Spring beans上将调用run(String … args)方法。

@Component
public class MyBean implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("启动前执行");}
}

如果一些CommandLineRunner beans被定义必须以特定的次序调用, 你可以额外实现org.springframework.core.Ordered接口或使用org.springframework.core.annotation.Order注解。

Application退出

每个SpringApplication在退出时为了确保ApplicationContext被优雅的关闭, 将会注册一个JVM的shutdown钩子。所有标准的Spring生命周期回调(比如, DisposableBean接口或@PreDestroy注解)都能使用。

此外, 如果beans想在应用结束时返回一个特定的退出码(exit code),可以实现org.springframework.boot.ExitCodeGenerator接口。


我是代码匠心,和我一起学习更多精彩知识!!!扫描二维码!关注我,实时获取推送。

公众号
源文来自:https://daimajiangxin.cn
源码地址:https://gitee.com/daimajiangxin/springboot-learning

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

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

相关文章

ACL实验

要求:1、PC1可以telnet登录R1,不能ping通R1 2、PC1可以ping通R2,但不能登录R2。 3、PC2的所有规则与pc1相反。 第一步、如图配置IP地址 第二步、运行静态路由协议,使全网可达 [R2]ip route-static 192.168.2.0 24 192.168.1.1…

Python学习之-pyechart详解

前言: 什么是pyechart? Pyecharts 是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个由百度开源的数据可视化工具,它提供的图表种类丰富,交互性强,兼容性好,非常适合用于数据分析结果的展示。Pyec…

深入K8S实战

K8S: 深入K8S实战进阶篇 1、搭建 Kubernetes 集群 1.1、搭建方案 1.1.1、minikube minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机(包括 Windows、macOS 和 Linux PC)上运行一个一体化(all-i…

「C1N短网址教程」短链接之网上生成的短链接可以用多久

网上生成的短链接可以用多久?很多人发现自己生成的短链接一会儿就失效了,今天我们就站在业内人士的角度说说网上生成的短链接可以用多久。 因为短链接生成之后是固定的,它就像我们网站的链接一样,只是披了层外衣,所以从理论上来说…

盘点MySQL热门话题(200条)

1、使用MySQL管理软件进行数据库备份,关键词:数据库备份,MySQL管理软件 2、优化MySQL查询性能的方法,关键词:MySQL查询优化,性能调优 3、如何使用MySQL进行分页查询,关键词:分页查…

透视 Insilico 英矽智能:AI 制药明星企业的飞跃、困境与破局

衰老,从古至今困扰了无数仁人志士。无论是千古一帝秦始皇,还是雄才大略汉武帝,亦或者挥斥方遒唐太宗,这些伟大的帝王无一例外的都留下了许多追求长生的故事。当时光的指针落在了 21 世纪的第二个十年,随着全球老龄化问…

四大生成式模型的比较——GAN、VAE、归一化流和扩散模型

比较四大模型的本质 four modern deep generative models: generative adversarial networks, variational autoencoders, normalizing flows, and diffusion models 待写

盘点最新十大热门靠谱一手接单平台,都说好用!

夸克网盘、头条网盘、迅雷网盘等网盘类项目可以说是比较炙手可热的项目,它因为操作简单,可复制强伸手拉新人士的喜欢,但是从哪里能对接到一手项目,官网渠道,今天小推给大家罗列了十个比较不错的拉新项目分发平台。 一…

VIM支持C/C++/Verilog/SystemVerilog配置并支持Win/Linux环境的配置

作为一个芯片公司打杂人口,往往需要一个皮实耐打上天入地的编辑器… 一、先附上github路径,方便取走 git clone gitgithub.com:qqqw4549/vim_config_c_verilog.git 二、效果展示 支持ctrl]函数/模块跳转,支持cscope字串全局代码搜索 依赖&am…

栈|逆波兰表达式求值

逆波兰表达式求值 题目算法原理代码实现补充 stoi的实现 题目 逆波兰表达式求值 逆波兰表达式就是后缀表达式,我们平时写的带括号的是中缀表达式。区分中缀表达式和后缀表达式 就是 操作数 和 操作符 的先后关系。 操作符在后 就是后缀表达式 后缀表达式 的用途就…

2024年Rust魅力:谷歌重写C++系统6大心得

讲动人的故事,写懂人的代码 2024年3月26日,谷歌安卓部门的编译器和运行时团队负责人Lars Bergstorm在英国伦敦的Rust Nation UK技术大会上,跟大家分享了他们的团队几百名工程师在几年内用Rust重写了几十个C++和Go系统的六点心得哦。 1 用Rust后生产力更高 自从我们用Rust重…

有道词典网页版接口分析与爬虫研究

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 一、目标站点 有道词典网页版:网易有道 二、目标接口 url:https://dict.youdao.com/jsonapi_s?doctypejson&…

1.微服务

一、微服务是什么 微服务是一种架构风格,即,一个应用应该是一组小型服务,每个服务器只负责一种服务,服务之间可以通过 HTTP 的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 可以说,微…

全国项目管理标准化技术委员会副秘书长肖杨先生受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 全国项目管理标准化技术委员会副秘书长、微薄之力(北京)管理咨询有限公司董事长肖杨先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“数字化时代下,由职能型组织向高度适应性组织转…

五款高性能开放式耳机推荐,户外畅听无拘束!

在追求运动乐趣的同时,我们也需要关注自身的安全。开放式蓝牙耳机作为一种新型的耳机类型,正逐渐受到运动爱好者的青睐。它的独特之处在于能够在佩戴时保持对周围环境的警觉性,让你在享受音乐的同时不忘安全。那么,如何选购一款适…

JavaWeb | 5 监听器与FreeMarker

JavaWeb | 5 监听器与FreeMarker 监听器 Listener开发监听器三要素六种常用监听接口内置对象监听接口属性监听接口 项目中监听器的应用场景 FreeMarker模板引擎FreeMarkerJSP与FreeMarkerFreeMarker快速上手FTL取值if分支判断switch分支判断list迭代内建函数 监听器 Listener 对…

推荐学习什么编程语言?

选择编程语言学习时,除了就业因素外,还可以考虑以下几个方面来决定学习哪些编程语言: 个人兴趣与目标:如果你对某个特定领域感兴趣,比如游戏开发、数据分析、人工智能等,可以选择与该领域紧密相关的编程语言…

B站广告推广操作教程及费用?

哔哩哔哩(B站)作为国内极具影响力的年轻人文化社区,已成为众多品牌与企业触达目标受众、提升品牌影响力的重要阵地。然而,面对B站复杂的广告系统与精细化运营需求,许多广告主可能对如何高效开展B站广告推广感到困惑。云…

2023图灵奖得主揭晓!史上首位计算机和数学最高奖“双料王”诞生

重磅消息!北京时间4月10日下午5点整,ACM宣布把2023年图灵奖颁给Avi Wigderson,以表彰Wigderson对计算理论和随机性做出的奠基性贡献。 ACM图灵奖通常被称为“计算机领域的诺贝尔奖”,奖金为100万美元,通常颁发给计算机…

Asterisk 21.2.0编译安装经常遇到的问题和解决办法之json

目录 写在json之前Asterisk requires libjansson 写在json之前 在讨论jansson之前,我们先来看另外一个问题: checking for libedit… no checking for history_init in -ledit… no configure: error: *** Please install the ‘libedit’ development …