从零开始学Spring Boot系列-SpringApplication

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

    @SpringBootApplication
    public 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 {

    @Override
    public 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

中老年人高血糖预防需知:少碰两黄一白,四指标严格控制!

对于血糖不好的人来说,尤其是中老年人,饮食上的调整非常重要。 “少碰两黄一白”是一个很好的饮食原则,可以帮助稳定血糖,预防糖尿病及其并发症的发生。 “两黄”指的是油炸食物和含糖量高的食物,长期摄入会导致身体肥…

css实现扫码循环扫描特效

摘要&#xff1a; 需求中需要模拟扫描的效果来实现户型的生成&#xff01;由于接口ai生成的图片户型时间比较长&#xff0c;所以需要模拟特效&#xff01; <!DOCTYPE html> <html><head><mate charset"UTF-8" /><title>扫描</title…

第二证券|这些翻倍牛股,他们赚到了!

龙年开市以来&#xff0c;有色、化工等周期板块以及AI、轿车等板块表现亮眼&#xff0c;成为商场主线&#xff0c;也涌现出多只大牛股。 数据显现&#xff0c;2月19日以来&#xff0c;到4月10日收盘&#xff0c;A股商场共涌现出33只翻倍股&#xff0c;234只个股涨幅超50%。易方…

美国G口服务器租用的应用领域

在当今数字化快速发展的时代&#xff0c;服务器成为了各行各业不可或缺的重要工具。其中&#xff0c;美国G口服务器以其高带宽、高性能的特点&#xff0c;在众多领域得到了广泛的应用。那么&#xff0c;美国G口服务器租用的应用领域究竟有哪些呢?接下来&#xff0c;本文将为您…

Python快速获取编程问题答案的方法库之howdoi使用详解

概要 howdoi是一个命令行工具,它提供了一种快速获取编程问题答案的方法,通过搜索和抓取Stack Overflow等网站的内容,直接在终端中显示编程问题的解决方案。 安装 通过pip可以轻松安装howdoi: pip install howdoi特性 快速访问编程解决方案:无需手动浏览Stack Overflow。…

大象机器人发布智能遥操作机械臂组合myArm MC,加速具身智能研究与发展!

在全球工业自动化和智能化加速发展的今天&#xff0c;机器人行业正经历着翻天覆地的变化。具身智能研究&#xff0c;作为人工智能领域的关键分支&#xff0c;正努力在精准动作控制、高层次自主决策能力以及自然人机交互体验上赋予机器人新的能力。 在此背景下&#xff0c;大象机…

用uniapp写调色板组件

用uniapp写调色板组件 废话不多说&#xff0c;最近业务原因&#xff0c;需要用uniapp写一个调色板&#xff0c;记录一下 先上效果展示&#xff1a; 最下边的结果色可以实时跟踪&#xff0c;颜色值也可以实时变化&#xff0c;有个小缺陷就是&#xff0c;数值变化跟不上结果值…

【springCloud】版本学习

Spring Cloud介绍 官网地址&#xff1a;https://spring.io/projects/spring-cloud Spring Cloud 是一个基于 Spring Boot 的微服务架构解决方案&#xff0c;它提供了一系列工具和模式来帮助开发者构建分布式系统。Spring Cloud 的组件和模式包括配置管理、服务发现、断路器、…

AJAX 入门到实战 第1天 2024 笔记

1.1-AJAX入门与axios使用 1.2-认识URL 1.3-查询参数 1.4-案例_地区查询 <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*获取地区列表: http://hmajax.itheima.net/api/area查询参数:pname: 省份或直辖市…

2024年蓝牙耳机怎么选?五大必看热门蓝牙耳机推荐篇!

​面对市场上琳琅满目的蓝牙耳机&#xff0c;许多消费者感到难以抉择。作为一个耳机爱好者&#xff0c;我根据自己的使用经验&#xff0c;精心挑选了一些我认为值得推荐的蓝牙耳机&#xff0c;希望能为你的选购提供帮助。 一、如何挑选蓝牙耳机&#xff1f;&#xff08;码住重点…

Python爬取淘宝商品评价信息API接口测试实例

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,it…

酷我音乐手机版高级版,听歌必备,资源丰富,全部免费!

hi&#xff0c;大家好我是技术苟&#xff0c;每周准时上线为你带来实用黑科技&#xff01;由于公众号改版&#xff0c;现在的公众号消息已经不再按照时间顺序排送了。因此小伙伴们就很容易错过精彩内容。喜欢黑科技的小伙伴&#xff0c;可以将黑科技百科公众号设为标星&#xf…

Mybatis分页查询用PageHelper插件

首先看接口文档需求 看响应数据样例&#xff0c;那么咱们先自定义一个bean来满足这个需求&#xff0c;这里定义PageBean实体类 package com.itheima.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;//分…

并发编程——7.Java的“锁”事

如题目所示&#xff0c;这篇文章我们着重讲解Java里面的各种锁以及与Java锁有关的内容。争取一篇文章让你吃透Java的锁。 目录 1.前言 2.乐观锁和悲观锁 2.1悲观锁 2.2乐观锁 2.2.1乐观锁的介绍 2.2.2CAS算法 3.自旋锁与互斥锁 4.wait/sleep区别 5.生产者与消费者模式…

数据结构与算法之桶排序,Python开发教程入门

&#xff08;一&#xff09;数据结构与算法之数组 &#xff08;二&#xff09;数组结构与算法之栈 &#xff08;三&#xff09;数据结构与算法之队列 &#xff08;四&#xff09;数据结构与算法之链表 &#xff08;五&#xff09;数据结构与算法之树结构基础 &#xff08;…

Web前端开发——Vue概述

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! Vue Vue是一套前端框架&#xff0c;基于MVVM(Model-View-ViewModel)思想&#xff0c;实现数据的双向绑定&#xff0c;将编程的专注点放在数据上&#xff0c;可以免除原生JavaScript中的DOM操作&am…

CVPR 2024 | Open-Vocabulary Video Anomaly Detection

CVPR 2024 - Open-Vocabulary Video Anomaly Detection 论文&#xff1a;https://arxiv.org/abs/2311.07042原始文档&#xff1a;https://github.com/lartpang/blog/issues/14 这篇文章主要研究了开放词汇视频异常检测&#xff08;openvocabulary video anomaly detection&…

Python列表到Excel表格第一列的转换技术详解

目录 一、Python列表与Excel表格的关系 二、所需工具与库 三、使用openpyxl将列表写入Excel第一列 四、使用pandas将列表写入Excel第一列 五、案例分析与注意事项 六、扩展应用与进阶学习 七、总结与展望 在数据处理和分析中&#xff0c;经常需要将Python中的数据&#…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…