侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 163 篇文章
  • 累计创建 66 个标签
  • 累计收到 2 条评论

揭开Spring Boot的神秘面纱之功能篇

liveJQ
2019-05-22 / 0 评论 / 0 点赞 / 665 阅读 / 2,866 字

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}

20190522_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")。

0

评论区