SpringBoot自定义启动界面的实现代码

 更新时间:2024年07月18日 09:12:15   作者:码农研究僧  
实现自定义启动动画是一项有趣的任务,虽然Spring Boot本身不提供内置的动画功能,但可以通过一些技巧来实现,本文主要以Demo的形式展示,再者下面的Demo都可以联合使用,需要的朋友可以参考下

前言

实现自定义启动动画是一项有趣的任务,虽然Spring Boot本身不提供内置的动画功能,但可以通过一些技巧来实现

以下主要以Demo的形式展示,再者下面的Demo都可以联合使用

1. banner.text

在资源文件夹(通常是src/main/resources)下放置一个名为banner.txt的文件,来自定义应用启动时的Banner,文件的内容会在应用启动时显示在控制台中

优点如下:简单且易于实现,且只需在banner.txt文件中定义文本即可,不需要编写Java代码
缺点如下:只能显示静态文本或图案,不支持动态动画效果

整体的Demo如下:

.__   __.   ______      .______    __    __    _______
|  \ |  |  /  __  \     |   _  \  |  |  |  |  /  _____|
|   \|  | |  |  |  |    |  |_)  | |  |  |  | |  |  __
|  . `  | |  |  |  |    |   _  <  |  |  |  | |  | |_ |
|  |\   | |  `--'  |    |  |_)  | |  `--'  | |  |__| |
|__| \__|  \______/     |______/   \______/   \______|         

之后启动应用程序即可

截图如下:

已经设置了banner.txt文件来显示自定义启动Banner,但希望在某些情况下关闭这个Banner

1.1 配置文件关闭

在Spring Boot的配置文件(例如application.properties或application.yml)中设置spring.main.banner-mode属性为off来关闭Banner

application.properties:

spring.main.banner-mode=off

application.yml:

yaml
复制代码
spring:
  main:
    banner-mode: off

1.2 启动类关闭

只需要设置为off即可

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

1.3 命令行关闭

java -jar your-application.jar --spring.main.banner-mode=off

2. 自定义Banner类

创建一个实现Banner接口的类,例如CustomBanner:

Demo如下:

import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;
import java.io.PrintStream;

public class CustomBanner implements Banner {
    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        out.println("Custom Startup Animation");
        for (int i = 0; i < 10; i++) {
            try {
                out.print(".");
                Thread.sleep(500); // 延时0.5秒
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
        out.println();
    }
}

在启动类中设置自定义Banner

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class CustomBannerApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(CustomBannerApplication.class);
        app.setBanner(new CustomBanner());
        app.run(args);
    }
}

相对复杂的动画特效如下:

import org.springframework.boot.Banner;
import org.springframework.core.env.Environment;

import java.io.PrintStream;

public class CustomBanner implements Banner {
    @Override
    public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
        out.println("Starting Application...");

        int max = 50;
        for (int i = 0; i <= max; i++) {
            out.print("\r[");
            for (int j = 0; j < max; j++) {
                if (j < i) {
                    out.print("=");
                } else {
                    out.print(" ");
                }
            }
            out.print("] " + i * 2 + "%");
            try {
                Thread.sleep(100); // 延时0.1秒
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
        out.println("\nApplication Started.");
    }
}

3. 自动配置类

也可通过自动配置类

import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;

@AutoConfiguration
public class BannerAutoConfiguration {

    @Bean
    public BannerApplicationRunner bannerApplicationRunner() {
        return new BannerApplicationRunner();
    }
}

实现一个BannerApplicationRunner类,包含自定义启动动画逻辑:

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class BannerApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("Custom Startup Animation");
        for (int i = 0; i < 10; i++) {
            System.out.print(".");
            Thread.sleep(500);
        }
        System.out.println();
    }
}

启动类无需修改
只需要添加自动加载以及扫描对应包即可:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SuppressWarnings("SpringComponentScan")
@SpringBootApplication(scanBasePackages = {"${info.base-package}.server", "${info.base-package}.module"})
public class ServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class, args);
    }
}

总的来说:

  • @AutoConfiguration:确保BannerAutoConfiguration在应用启动时被自动加载
  • @Bean:定义一个bean,这个bean在应用启动时被创建并注册到Spring容器中
  • @SpringBootApplication:触发组件扫描和自动配置

4. 总结

  • banner.txt方法:适合简单的静态文本展示,易于实现,但缺乏动态效果
  • 自定义Banner类方法:适合复杂的动态效果,实现灵活,但需要编写Java代码
  • 自动配置类方法:结合了Spring Boot自动配置的优点,配置类自动加载,适合更复杂的配置和动态效果

如果上述的Demo多个联合使用,需要注意时间顺序
可以在如下加入延迟,类似如下:

public class BannerApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) {
        ThreadUtil.execute(() -> {
            ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾
            log.info("ceshi");
	     });
	}
}

到此这篇关于SpringBoot自定义启动界面的实现代码的文章就介绍到这了,更多相关SpringBoot自定义启动界面内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringMVC使用RESTful接口案例

    SpringMVC使用RESTful接口案例

    RESTful是一种web软件风格,它不是标准也不是协议,它不一定要采用,只是一种风格,它倡导的是一个资源定位(url)及资源操作的风格,这篇文章主要介绍了SpringBoot使用RESTful接口
    2022-12-12
  • Java中JDBC连接池的基本原理及实现方式

    Java中JDBC连接池的基本原理及实现方式

    本文详细讲解了Java中JDBC连接池的基本原理及实现方式,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Java zookeeper服务的使用详解

    Java zookeeper服务的使用详解

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等
    2022-08-08
  • SpringBoot进行多表查询功能的实现

    SpringBoot进行多表查询功能的实现

    这篇文章主要介绍了SpringBoot进行多表查询功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 基于Spring Data Jest的Elasticsearch数据统计示例

    基于Spring Data Jest的Elasticsearch数据统计示例

    本篇文章主要介绍了基于Spring Data Jest的Elasticsearch数据统计示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Spring之从桥接方法到JVM方法调用解读

    Spring之从桥接方法到JVM方法调用解读

    这篇文章主要介绍了Spring之从桥接方法到JVM方法调用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 基于Java swing组件实现简易计算器

    基于Java swing组件实现简易计算器

    这篇文章主要介绍了基于Java swing组件实现简易计算器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java concurrency之AtomicLongArray原子类_动力节点Java学院整理

    Java concurrency之AtomicLongArray原子类_动力节点Java学院整理

    这篇文章主要介绍了Java concurrency之AtomicLongArray原子类的相关知识,感兴趣的朋友参考下吧
    2017-06-06
  • SpringBoot配置Druid数据监控代码实例

    SpringBoot配置Druid数据监控代码实例

    这篇文章主要介绍了SpringBoot配置Druid数据监控代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot 请求参数忽略大小写的实例

    SpringBoot 请求参数忽略大小写的实例

    这篇文章主要介绍了SpringBoot 请求参数忽略大小写的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论