这里就引申出了本篇将要介绍的 Banner 信息打印流程。 :banner 信息打印接口类最后根据 bannerMode 的值不同,有下面两种 banner 信息打印模式:3.1 LOG 模式打印LOG 模式打印,可见如下:bannerPrinter.print 接口,该接口对应实际要打印的 Banner 信息的实现类。 Banner 信息打印的源码,相信如果上面的内容都看下来的话,完全熟悉 Banner 信息打印流程不再是个问题。 有了这些基础的知识,我们就可以来自定义 Banner 信息打印,敬请期待下篇博文!!!
《Spring Boot 源码学习系列》引言上篇博文,Huazie 带大家了解了完整的 Banner 信息打印流程。相信大家都跃跃一试了,那么本篇就以这些基础的知识,来自定义 Banner 信息打印。 打印 Banner 信息。 ,则会使用 ImageBanner 打印 Banner 信息。 =classpath:banner/mybanner.png然后,我们运行 DemoApplication 入口类,可见如下运行截图:2.3 添加自定义的图像显示信息查看 ImageBanner 的源码 Banner 信息打印,再次加深了对 Banner 信息打印流程的理解。
,也可以给打印的信息增加 css 样式,你甚至可以在控制台里打印图片! 一、 打印调试信息 console.debug('调试信息') 打印的调试信息可以在浏览器的 console -> levels 里面的 Verbose 里看到 二、打印普通信息 console.log ("普通信息") 打印信息 console.info("打印信息") 在谷歌浏览器中打印的效果和打印普通信息几乎一样。 ") 打印警告信息,调试的时候常用。 十一、打印错误信息 console.error("这是一个错误信息") 打印错误信息,调试的时候常用。
Spring Boot 系统初始化器详解 Spring Boot 监听器详解 Spring Boot banner详解 自定义banner Spring Boot 默认打印的banner是这样的,Java 一般的公司如果有自己脚手架,都会选择自定义banner,放一个公司Logo或者框架别名。 自定义banner 样式 光一个Logo也还是太单调,如果能再打印个Spring Boot 版本、应用程序版本就更好了,Spring Boot 都给我们提供了相关变量,可以在banner.txt中使用。 Spring Boot 提供了spring.main.banner-mode 配置,OFF-关闭banner打印,CONSOLE-使用System.out打印banner,log文件不会记录,LOG-打印到 log文件 另外同样可以用springApplication.setBannerMode(Banner.Mode.OFF);方式设置banner 加载打印原理 在之前的《Spring Boot 框架整体启动流程详解
SpringBoot源码 | printBanner方法解析 printBanner printBanner方法用于打印在src/main/resources下名字是banner的自定义日志文件信息,对于整体的 SpringBoot启动流程来说不算主启动业务流程,但是也提供了自定义打印日志内容的可能,有一定存在的意义,所以这里也一起来看一下printBanner方法内部吧,printBanner方法源码加入注释后 是否允许打印banner信息 if (this.bannerMode == Banner.Mode.OFF) { return null; } //资源加载类 ,回到print方法打印banner.txt文本内容 通过构造方法返回PrintedBanner用于后续打印日志信息输出 其中构造方法中参数sourceClass是主程序类 到这里整个 banner日志信息 //
22-SpringBoot流程分析-run SpringBoot流程分析-run 启动计时器 执行监听器 准备环境 打印banner:可以resource下粘贴自定义的banner 创建context 4.打印Banner信息 image-20220227172317638 可以看到这里打印了 Banner 信息。 5.将断点设置在打印Banner处,去除其他断点 好了,设置好断点之后,我们就可以修改设置一个 banner.txt 进行文件替换,然后再重新debug 进来看看效果。 6.设置 banner.txt ,替换打印的信息 _ooOoo_ o8888888o 佛祖保佑 永无BUG 再次debug启动服务,可以查看打印信息如下: 注意:如果没有,那么则执行 maven clean 后,再执行。
接下来将深入介绍启动Banner打印的具体实现及流程。 banner.printBanner(environment, sourceClass, out); // 返回一个 PrintedBanner 对象,包含打印的横幅和源类信息。 ", ex); } // 返回一个 PrintedBanner 对象,包含打印的横幅和源类信息。 // 默认的 Banner 实现,用于打印 "Spring" 的启动横幅,和版本信息 class SpringBootBanner implements Banner { // 预定义的 ASCII / 版本号 )); // 添加空行用于分隔横幅和其他输出 printStream.println(); } } 控制台效果 总结 本文全面解析了SpringBoot启动横幅的实现原理、打印流程及自定义方法
打印Banner Banner printedBanner = printBanner(environment); // 5. 自定义Banner的实现与实践 在Spring Boot启动过程中,控制台打印的Banner不仅是技术产品的一张"名片",更是开发者展示项目个性的绝佳机会。 的支持(2.x版本曾支持) 增强了对Unicode字符的支持 环境变量spring.banner.image.* 配置项有调整 实战调试技巧 要验证自定义Banner是否生效: 在SpringApplication.run 打印Banner(控制台图标) Banner printedBanner = printBanner(environment); // 4. =50 // 图片Banner宽度 spring.main.banner-mode=console/off/log // 编程式自定义(Spring Boot 3.2+) @Bean public
可以通过向类路径中添加一个banner.txt文件或设置spring.banner来更改在start up上打印的banner。属性指向此类文件的位置。 将gif、banner.jpg或banner.png图像文件保存到类路径或设置spring.banner.image。位置属性。图像被转换成ASCII艺术形式,并打印在任何文本横幅上面。 1. 自定义 banner 根据官方的描述,可以在类路径中自定义 banner 图案,我们进行尝试在放 resouce 目录下新建文件 banner.txt 并写入内容(在线字符生成)。 自定义 Banner Springboot 把图案转成了 ASCII 图案。 2. 3 /** 获取自定义banner文件信息 */ private Banner getImageBanner(Environment environment) { // BANNER_IMAGE_LOCATION_PROPERTY
1.在src/main/resources新建banner.txt 写入信息内容2.在application.properties#自定义打印 bannerspring.banner.location= classpath:banner.txtspring.banner.charset=utf-83.关闭bannerpublic static void ma... 今天说一说7.Spring-Boot自定义Banner,希望能够帮助大家进步!!! 1.在src/main/resources 新建banner.txt 写入信息内容 2.在application.properties #自定义打印banner spring.banner.location =classpath:banner.txt spring.banner.charset=utf-8 3.关闭banner 此代码由Java架构师必看网-架构君整理 public static void
banner Banner printedBanner = printBanner(environment); //创建ApplicationContext,根据WebApplicationType 计算启动需要的时间 Duration timeTakenToStartup = Duration.ofNanos(System.nanoTime() - startTime); //记录应用程序启动信息 banner 8、创建ApplicationContext 9、设置启动期间的度量记录类 10、准备应用程序上下文 11、刷新应用程序上下文 12、计算启动需要的时间 13、如果需要,记录应用程序启动信息 banner private Banner printBanner(ConfigurableEnvironment environment) { //banner关闭,不打印 if (this.bannerMode this.resourceLoader : new DefaultResourceLoader(null); //banner打印器 SpringApplicationBannerPrinter
,在这里我们可以很直观的看到它的执行顺序,是在打印banner的后面执行的; 4、加载所有的监听器 加载监听器也是从 META-INF/spring.factories 配置文件中加载的,与初始化不同的是 banner 信息 显而易见,这个流程就是用来打印控制台那个很大的spring的banner的,就是下面这个东东 那他在哪里打印的呢? 他在 SpringBootBanner.java 里面打印的,这个类实现了Banner 接口, 而且banner信息是直接在代码里面写死的; 有些公司喜欢自定义banner信息,如果想要改成自己喜欢的图标该怎么办呢 springboot错误信息,返回true则只打印异常信息 return false; } } 在 spring.factories 文件中注册异常报告器 # Error Reporters run方法2,实现 CommandLineRunner 接口既可运行" ); } } 启动springboot后就可以看到控制台打印的信息了 完 其实了解springboot
,在这里我们可以很直观的看到它的执行顺序,是在打印banner的后面执行的; 4、加载所有的监听器 加载监听器也是从 META-INF/spring.factories 配置文件中加载的,与初始化不同的是 banner 信息 显而易见,这个流程就是用来打印控制台那个很大的spring的banner的,就是下面这个东东 那他在哪里打印的呢? 他在 SpringBootBanner.java 里面打印的,这个类实现了Banner 接口, 而且banner信息是直接在代码里面写死的; 有些公司喜欢自定义banner信息,如果想要改成自己喜欢的图标该怎么办呢 springboot错误信息,返回true则只打印异常信息 return false; } } 在 spring.factories 文件中注册异常报告器 # Error Reporters 异常报告器 run方法2,实现 CommandLineRunner 接口既可运行" ); } } 启动springboot后就可以看到控制台打印的信息了 完 其实了解springboot启动原理对开发人员还是有好处的
SpringBoot启动流程 SpringBoot启动流程涉及到的步骤相对来说容易理解,这里我先准备一个启动类 类需要标注@SpringBootApplication的注解,然后就可以直接以main deduceMainApplicationClass 后面继续跟进可以看到deduceMainApplicationClass()理解为推断推论主程序类,debug可以看到获取了main函数所在的主程序类 自定义 void initialize(ConfigurableApplicationContext applicationContext) { System.out.println("加载自定义 src/main/resources下放入名字是banner的自定义文件 Banner printedBanner = printBanner(environment); ,继续往下看 printBanner 打印配置的banner文本信息 banner文件路径在\src\main\resources\banner.txt,可以通过更该文件内容展示不同的启动成功信息
23.2自定义横幅 通过将 banner.txt 文件添加到类路径或将 spring.banner.location 属性设置为此类文件的位置,可以更改启动时打印的横幅。 图像将转换为ASCII艺术表示,并打印在任何文本横幅上方。 在 banner.txt 文件中,您可以使用以下任何占位符: 表23.1。 您还可以使用 spring.main.banner-mode 属性来确定是否必须在 System.out ( console )上打印横幅,发送到配置的记录器( log ),或 者根本不产生横幅( off YAML将 off 映射到 false ,因此如果要在应用程序中禁用横幅,请务必添加引号,如以下示例所示: spring: main: banner-mode: "off" 23.3自定义SpringApplication 有关详细信息,请参阅 SpringApplicationBuilder Javadoc。
第一章 springboot springboot启动流程 参考 https://blog.csdn.net/weixin_44947701/article/details/124055713 框架的初始化 Spring容器在进行初始化时,< bean>的信息封装成一个 BeanDefinition 对象,所有的 BeanDefinition 存储到一个名为 beanDefinitionMap 的 Map 7.bean的生命周期 实例化 --> 填充属性 --> 执行aware接口 --> 初始化 --> 可用状态 --> 销毁 第四章 banner解析 1.banner常见的配置方式 spring.banner.location 2.banner的获取原理 输出banner的逻辑 获取banner getIMGBanner getTextBanner 打印banner 3.banner输出原理 默认banner输出 先输出banner 指定内容 获取version信息 文本内容前后对其 文本内容染色 输出文本内容 文字banner输出 图片banner输出 读取图片文件流 输出图片内容 第五章 启动加载器/定时器 1.springboot
至此,ConfigurationEnvironment准备完毕,后面日志中开始输出banner信息。 5、第七步:打印banner Banner printedBanner = printBanner(environment); private Banner printBanner(ConfigurableEnvironment 这里的Banner是默认的,博主没有添加任何自定义的banner; 自定义Banner可以参考博文:趣味篇:SpringBoot自定义Banner。 至此,banner打印完毕,进入创建Spring应用上下文阶段。 logStartupInfo(context.getParent() == null); // 打印active profile的信息 logStartupProfileInfo(context);
1.1 设置关闭 Banner在笔者的《Banner 信息打印流程》 中,第 2 小节就介绍了如何关闭 Banner 信息打印。 ); springApplication.run(args); }}1.2 设置自定义 Banner 打印对象在笔者的《自定义 Banner 信息打印》 中,第 4 小节就介绍了如何自定义 Banner 接口实现。 System.out.println(customConfiguration.getAuthor()); }}最后,我们运行 DemoApplication 中的 main 方法,从如下截图中可以看出这里已经打印了自定义类的属性值 :图片2.3 合并配置源信息无论是通过构造参数,还是通过 setSources 方法,对配置源信息进行指定,在 Spring Boot 中都会将其合并。
2.6 打印 Banner 信息 Banner printedBanner = printBanner(environment); printBanner 方法用于 Spring Boot 启动时的 Banner 信息打印。 想要深入了解 Banner 打印的读者们,请查看如下博文: 《Banner 信息打印流程》 《自定义 Banner 信息打印》 2.7 新建应用上下文 ConfigurableApplicationContext StartupInfoLogger 类用于在应用程序启动时记录应用信息,其中 logStarted 方法用于以 INFO 日志级别打印应用启动时间。 自定义处理逻辑:根据具体的业务需求,实现自定义的错误处理逻辑,比如回滚事务、关闭网络连接等。 有关这块更详细的内容,后续 Huazie 将专门出一篇讲解,敬请期待!!!
相信用过 Spring Boot 的朋友们一定在启动日志中见过类似如下的内容,比如在启动 Spring Boot 时,控制台默认会打印 Spring Boot Logo 以及版本信息,这是 Spring Boot 固定的还是可自定义的呢? 有三种模式:console/log/off # console 打印到控制台(通过 System.out) # log - 打印到日志中 # off - 关闭打印 spring.main.banner-mode /taag http://www.degraeve.com/img2txt.php 总结 默认 Spring Boot 会注册一个 SpringBootBanner 的单例 Bean,用来负责打印 Banner 一般自定义 Spring Boot Banner 是企业/团队/项目的 Slogan。