SpringApplication

系统默认

SpringApplication.run(DemoApplication.class, args);

启动前添加定义



SpringApplication app = new SpringApplication(DemoApplication .class);
        app.setBannerMode(Banner.Mode.CONSOLE);
app.run(args);


new SpringApplicationBuilder(DemoApplication.class).properties("spring.config.location=classpath:application.yml").run(args);
// 或者:
        AnsiOutput.setEnabled(AnsiOutput.Enabled.ALWAYS);
        new SpringApplicationBuilder(DemoApplication.class)
                .main(SpringVersion.class) // 这个是为了可以加载 Spring 版本
                .bannerMode(Banner.Mode.CONSOLE) // 控制台打印
                .run(args);

// 又或者:(构建ApplicationContext层次结构(具有父/子关系的多个上下文)一般不用)
new SpringApplicationBuilder()
        .sources(Parent.class)
        .child(Application.class)
        .bannerMode(Banner.Mode.OFF)
        .run(args);
限制:Web组件必须包含在子上下文中,并且Environment父组件和子上下文都使用相同的组件。

实现ApplicationRunner或CommandLineRunner接口

run方法,该方法在SpringApplication.run(…​)完成之前调用


import org.springframework.boot.*;
import org.springframework.stereotype.*;

@Component
public class MyBean implements CommandLineRunner {

    public void run(String... args) {
        // Do something...
    }

}

实现Application Exit


@SpringBootApplication
public class DemoApplication {

    @Bean
    public ExitCodeGenerator exitCodeGenerator() {
        return () -> 42;// 安全退出并返回code 42
    }

    public static void main(String[] args) {
        System.exit(SpringApplication
                .exit(SpringApplication.run(DemoApplication.class, args)));
    }
}

Banner接口

文件定义横幅

在resources下定义banner.txt文件:

${AnsiColor.BRIGHT_GREEN}

.__  .__                  ____.________
|  | |__|__  __ ____     |    |\_____  \
|  | |  \  \/ // __ \    |    | /  / \  \
|  |_|  |\   /\  ___//\__|    |/   \_/.  \
|____/__| \_/  \___  >________|\_____\ \_/
                   \/                 \__>

    Spring Boot Version : ${spring-boot.formatted-version}

banner.png

变量描述

${application.version}

应用程序的版本号,如声明中所声明的MANIFEST.MF例如, Implementation-Version: 1.0打印为1.0

${application.formatted-version}

应用程序的版本号,在声明中声明MANIFEST.MF并格式化(用括号括起来并以前缀为例v)。例如(v1.0)

${spring-boot.version}

您正在使用的Spring Boot版本。例如2.1.5.RELEASE

${spring-boot.formatted-version}

您正在使用的Spring Boot版本,格式化显示(用括号括起来并带有前缀v)。例如(v2.1.5.RELEASE)

${Ansi.NAME}(或${AnsiColor.NAME}${AnsiBackground.NAME}${AnsiStyle.NAME}

NAMEANSI转义码的名称在哪里详情 AnsiPropertySource请见。

${application.title}

申请的标题,如声明中所述MANIFEST.MF例如 Implementation-Title: MyApp打印为MyApp

程序定义横幅


SpringApplication app = new SpringApplication(DemoApplication .class);
        app.setBannerMode(Banner.Mode.CONSOLE);
        app.setBanner(new Banner() {
            @Override
            public void printBanner(Environment environment, Class<?> sourceClass, PrintStream out) {
                System.out.println("定义的ansi图案");
            }
        });
        app.run(args);

不输出横幅


spring:
  main:
    banner-mode: "off"

等价于:


SpringApplication app = new SpringApplication(DemoApplication .class);
        app.setBannerMode(Banner.Mode.OFF);

通过组件@Component中的name属性外部化配置


import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;

@Component
public class MyBean {

    @Value("${name}")
    private String name;

    // ...

}

在应用程序类路径上(例如,在jar中),您可以拥有一个 application.properties为其提供合理的默认属性值的文件name。在新环境中运行时,application.properties可以在jar外部提供一个覆盖该文件的文件name。对于一次性测试,您可以使用特定的命令行开关启动(例如,java -jar app.jar –name=”Spring”)。

  • 揭开Spring Boot的神秘面纱之配置篇

    介绍Spring BootSpring Boot可以轻松创建可以运行的独立的,生产级的基于Spring的应用程序。我们对Spring平...

    揭开Spring Boot的神秘面纱之配置篇
  • 初次使用Python第三方模块pygame写小游戏

    基础不牢,地动山摇先上图看成效(背景每次打开位置随机生成): 飞船与外星人相撞(飞船可上下左右移动): 对于刚掌握一门高级语言基础的人...

    初次使用Python第三方模块pygame写小游戏
  • Python入门小结

    Python特性与设计哲学Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多重继承,...

    Python入门小结