当前位置: 首页 > 后端技术 > Java

SpringBoot开发——如何自定义自己的Banner?我还可以使用图片吗?

时间:2023-04-01 14:39:06 Java

当我们启动SpringBoot程序时,我们就有了SpringBoot的Banner信息,那么如何自定义成自己项目的信息呢?@pdaiSpringBootDevelopment-如何定制自己的Banner?我还可以使用图片吗?什么是Banner如何改变Banner的文字Banner的设计Banner网站的一些设计IDEABanner插件其他工具Banner中的其他配置信息动画Banner设计关于图片的进一步思考Banner是如何工作的?示例源码更多内容什么是Banner当我们启动SpringBoot程序时,有如下Banner信息:那么如何自定义为自己项目的名称呢?如何更改Banner更改Banner有几种方式:Banner.txt配置(最常用)在application.yml中添加配置spring:banner:charset:UTF-8location:classpath:banner.txt在resource下创建banner.txt,内容自定义:----welcome----https://pdai.tech----------------修改后重启应用SpringApplication的效果设置为启动参数SpringApplicationapplication=newSpringApplication(App.class);/***Banner.Mode.OFF:关闭;*Banner.Mode.CONSOLE:控制台输出,默认模式;*Banner.Mode.LOG:日志输出模式;*/应用。setBannerMode(Banner.Mode.OFF);//这里application.run(args);SpringApplication也可以设置自定义Banner界面类文字BannerDesign上面的文字如何设计?一些设计Banner的网站可以通过这个网站设计:patorjkBanner例如:我们修改banner.txt,运行效果如下IDEA中的Banner插件IDEA中也有插件,但是没有预览功能其他工具http://www.network-science.de...http://www.degraeve.com/img2t。..http://www.bootschool.net/asciiBanner除了文件信息,还可以配置什么配置信息?比如Spring默认也携带了SpringBoot的当前版本号信息。在banner.txt中还可以进行一些设置:#springboot版本号${spring-boot.version}#springboot版本号在v前面跟大括号${spring-boot.formatted-version}#MANIFEST.MF文件中的版本号${application.version}#MANIFEST.MF文件的版本号前面是v后跟大括号${application.formatted-version}#MANIFEST.MF文件中的程序名${application.title}#ANSISamplecolor/style等${Ansi.NAME}(or${AnsiColor.NAME},${AnsiBackground.NAME},${AnsiStyle.NAME})简单测试如下(注意Jar必须打包生成资源/META-INF/MANIFEST.MF):动画Banner的设计可以设置动态Banner吗?喜欢图片吗?SpringBoot2是一个支持图片形式的Banner,spring:main:banner-mode:consoleshow-banner:truebanner:charset:UTF-8image:margin:0height:10invert:falselocation:classpath:pdai.png效果如下(需要选择合适的照片,否则效果不好,所以这种方法很少使用),注意:格式不要太大,否则会报错org.springframework.boot.ImageBanner:图像横幅不可打印:类路径资源[banner.gif](类java.lang.ArrayIndexOutOfBoundsException:'4096')图片Banner是如何工作的?发现Springboot可以将图片转换成ASCII码格式,那么它是怎么做到的呢?以此为例,我们看看Spring的Banner是如何生成的?获取Banner的优先级为环境变量中的Image优先级。格式在IMAGE_EXTENSION中,然后是banner.txt。如果没有,就用SpringBootBanner。如果是图片,获取图片Banner(属性配置等),转成ascii。获取横幅类SpringApplicationBannerPrinter{staticfinalStringBANNER_LOCATION_PROPERTY="spring.banner.location";静态最终字符串BANNER_IMAGE_LOCATION_PROPERTY="spring.banner.image.location";静态最终字符串DEFAULT_BANNER_LOCATION="banner.txt";staticfinalString[]IMAGE_EXTENSION=newString[]{"gif","jpg","png"};privatestaticfinalBannerDEFAULT_BANNER=newSpringBootBanner();//默认的SpringBannerprivatefinalResourceLoaderresourceLoader;私有最终横幅fallbackBanner;//获取Banner,优先级为环境变量中的Image优先级,格式在IMAGE_EXTENSION中,然后是banner.txtprivateBannergetBanner(Environmentenvironment){SpringApplicationBannerPrinter.Bannersbanners=newSpringApplicationBannerPrinter.Banners();banners.addIfNotNull(this.getImageBanner(环境));banners.addIfNotNull(this.getTextBanner(环境));if(banners.hasAtLeastOneBanner()){返回横幅;}else{返回this.fallbackBanner!=null?this.fallbackBanner:DEFAULT_BANNER;}}获取图片BannerprivateBannergetImageBanner(Environmentenvironment){Stringlocation=environment.getProperty("spring.banner.image.location");if(StringUtils.hasLength(location)){资源资源=this.resourceLoader.getResource(location);返回resource.exists()?新ImageBanner(资源):空;}else{String[]var3=IMAGE_EXTENSION;intvar4=var3.length;for(intvar5=0;var50){this.resetCursor(帧[i-1].getImage(),out);}this.printBanner(frames[i].getImage(),margin,invert,bitDepth,pixelMode,out);this.sleep(frames[i].getDelayTime());}}转换成asciiprivatevoidprintBanner(BufferedImageimage,intmargin,booleaninvert,BitDepthbitDepth,ImageBanner.PixelModepixelMode,PrintStreamout){AnsiElementbackground=invert?AnsiBackground.BLACK:AnsiBackground.DEFAULT;out.print(AnsiOutput.encode(AnsiColor.DEFAULT));out.print(AnsiOutput.encode(背景));out.println();out.println();AnsiElementlastColor=AnsiColor.DEFAULT;AnsiColors颜色=newAnsiColors(bitDepth);for(inty=0;y