1 SpringBoot应用(1.1-1.5)

1 SpringBoot应用(1.1-1.5)

系列文章目录:SpringBoot文档API翻译

本SpringApplication类提供了一个方便的方式来引导该从开始Spring应用程序main()的方法。在许多情况下,您可以委托给静态SpringApplication.run方法,如以下示例所示:

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

@SpringBootApplication
public class MyApplication {

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

}

当您的应用程序启动时,您应该会看到类似于以下输出的内容:

  . ____ _ _ _ 
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
 \\/ ___)| |_)| | | | | || (_| | ) ) ) 
  ' |____| .__|_| |_|_| |_\__, | // / / 
 ==========|_|================|___/=/_/_/_/ 
 :: Spring Boot :: v2.5.2 -SNAPSHOT 

2021年2月3日10:33:25.224 INFO 17321 --- [主要] osbdssSpringAppplicationExample:启动上MYCOMPUTER使用Java 1.8.0_232 SpringAppplicationExample与PID 17321(/apps/myjar.jar由pwebb启动)
2021年2月3日10:33:25.226 INFO 17900 --- [main] osbdssSpringAppplicationExample:没有设置活动配置文件,回退到默认配置文件:默认
2021-02-03 10:33:26.046 INFO 17321 --- [ main] osbwembedded.tomcat.TomcatWebServer :Tomcat 初始化端口:8080 (http) 
2021-02-03 10:33:26.07900FO -- - [main] o.apache.catalina.core.StandardService : 启动服务 [Tomcat] 
2021-02-03 10:33:26.055 INFO 17900 --- [main] org.apache.catalina.core.StandardEngine : 启动 Servlet 引擎: [Apache Tomcat/9.0.41] 2021-02-03 
10:33:26.097 INFO 17900 --- [main] oaccC[Tomcat].[localhost].[/] : 初始化 Spring 嵌入式 WebApplicationContext 
2021-02-03 10 :33:26.097 INFO 17900 --- [main] wscServletWebServerApplicationContext : Root WebApplicationContext: 初始化在 821 毫秒内完成
2021-02-03 10:33:26.144 INFO 17900 --- [main] s.tomcat.SampleTomcatApplication : ServletContext 初始化 2021-02-03 
10:33:26.376 INFO 17900 --- [maindedWebServer: osbw.embed Tomcat 在端口上启动:8080 (http) with context path '' 
2021-02-03 10:33:26.384 INFO 17900 --- [main] osbdssSpringAppplicationExample:在 1.514 秒内启动 SampleTomcatApplication(JVM 运行 1.823)

默认情况下,INFO会显示日志消息,包括一些相关的启动详细信息,例如启动应用程序的用户。如果您需要除INFO之外的日志级别,您可以在日志级别中设置它。应用程序版本是使用主应用程序类包中的实现版本确定的。可以通过设置spring.main.log-startup-info为关闭启动信息记录false。这也将关闭应用程序的活动配置文件的日志记录。

要在启动期间添加其他日志记录,您可以logStartupInfo(boolean)在SpringApplication.

1.1 启动失败

如果您的应用程序无法启动,注册FailureAnalyzers有机会提供专门的错误消息和解决问题的具体操作。例如,如果您在端口上启动 Web 应用程序8080并且该端口已在使用中,您应该会看到类似于以下消息的内容:

****************************
应用程序无法启动
******************* ********

描述:

嵌入式 servlet 容器无法启动。端口 8080 已被使用。

操作:

识别并停止侦听端口 8080 的进程或配置此应用程序以侦听另一个端口。

Spring Boot 提供了许多FailureAnalyzer实现,您可以添加自己的.

如果没有故障分析器能够处理异常,您仍然可以显示完整的条件报告以更好地了解出了什么问题。要做到这一点,你需要使debug属性或启用DEBUG日志记录的org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener。

例如,如果您使用 运行您的应用程序java -jar,您可以debug按如下方式启用该属性:

$ java -jar myproject-0.0.1-SNAPSHOT.jar --debug

1.2 延迟初始化

SpringApplication允许延迟初始化应用程序。启用延迟初始化后,bean 在需要时创建,而不是在应用程序启动期间创建。因此,启用延迟初始化可以减少应用程序启动所需的时间。在 Web 应用程序中,启用延迟初始化将导致许多与 Web 相关的 bean 在收到 HTTP 请求之前不会被初始化。

延迟初始化的一个缺点是它会延迟发现应用程序的问题。如果错误配置的 bean 被延迟初始化,则启动期间将不再发生故障,并且只有在初始化 bean 时问题才会变得明显。还必须注意确保 JVM 有足够的内存来容纳所有应用程序的 bean,而不仅仅是那些在启动期间初始化的 bean。由于这些原因,默认情况下不启用延迟初始化,建议在启用延迟初始化之前对 JVM 的堆大小进行微调。

可以使用SpringApplicationBuilder的lazyInitialization方法或SpringApplication的setLazyInitialization方法。或者,可以使用spring.main.lazy-initialization以下示例中所示的属性启用它:

spring.main.lazy-initialization=true

如果您想在对应用程序的其余部分使用延迟初始化的同时禁用某些 bean 的延迟初始化,您可以使用@Lazy(false)注释将它们的延迟属性显式设置为 false 。

1.3 自定义banner

可以通过将banner.txt文件添加到类路径或将spring.banner.location属性设置为此类文件的位置来更改启动时打印的横幅。如果文件的编码不是 UTF-8,您可以设置spring.banner.charset. 除了一个文本文件,你还可以添加一个banner.gif,banner.jpg或banner.png图像文件到类路径或设置spring.banner.image.location属性。图像被转换为​​ ASCII 艺术表现形式并打印在任何文本横幅上方。

在您的banner.txt文件中,您可以使用以下任何占位符:

VariableDescription
${application.version}应用程序的版本号,如MANIFEST.MF. 例如,Implementation-Version: 1.0打印为1.0.
${application.formatted-version}应用程序的版本号,如在MANIFEST.MF中声明并格式化以显示(用括号括起来并以 为前缀v)。例如(v1.0)。
${spring-boot.version}您正在使用的 Spring Boot 版本。例如2.5.2-SNAPSHOT。
${spring-boot.formatted-version}您正在使用的 Spring Boot 版本,已格式化以显示(用括号括起来并以 为前缀v)。例如(v2.5.2-SNAPSHOT)。
A n s i . N A M E ( 或 {Ansi.NAME}(或 Ansi.NAME({AnsiColor.NAME}, ${AnsiBackground.NAME}, ${AnsiStyle.NAME})NAMEANSI 转义码的名称在哪里。详情请参阅AnsiPropertySource。
${application.title}您的应用程序的标题,如MANIFEST.MF. 例如Implementation-Title: MyApp打印为MyApp.

SpringApplication.setBanner(…​)如果您想以编程方式生成横幅,则可以使用 该方法。使用org.springframework.boot.Banner接口并实现您自己的printBanner()方法。

您还可以使用该spring.main.banner-mode属性来确定横幅是否必须打印在System.out( console)、发送到配置的记录器 ( log) 或根本不生成 ( off)。
打印的banner在注册为单例 bean:springBootBanner.

a p p l i c a t i o n . v e r s i o n 和 {application.version}和 application.version{application.formatted-version},SpringBoot launchers中才可用。如果您正在运行解压缩的 jar 并以 .jar 开头,则不会解析这些值java -cp 。这就是为什么我们建议您始终使用java org.springframework.boot.loader.JarLauncher. 这将application.*在构建类路径和启动您的应用程序之前初始化横幅变量。

1.4 自定义SpringbootApplication

如果SpringApplication默认设置不满意,您可以改为创建本地实例并对其进行自定义。例如,要关闭banner,您可以编写:

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

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(MyApplication.class);
        application.setBannerMode(Banner.Mode.OFF);
        application.run(args);
    }

}


传递给SpringApplication的构造函数参数是 Spring bean 的配置源。在大多数情况下,这些是对@Configuration类的引用,但它们也可以是直接引用@Component类。

也可以SpringApplication使用application.properties文件进行配置。有关详细信息,请参阅外部化配置。
有关配置选项的完整列表,请参阅SpringApplicationJavadoc。

1.5 Fluent Builder API

如果您需要构建ApplicationContext层次结构(具有父/子关系的多个上下文),或者如果您更喜欢使用“流畅”构建器 API,则可以使用SpringApplicationBuilder.

在SpringApplicationBuilder让要链接的多个方法调用,并且包括parent和child其让你创建层次结构,以显示在下面的示例性方法:

new SpringApplicationBuilder()
        .sources(Parent.class)
        .child(Application.class)
        .bannerMode(Banner.Mode.OFF)
        .run(args);

创建ApplicationContext层次结构时有一些限制。例如,Web 组件必须包含在子上下文中,并且Environment对于父上下文和子上下文都相同。有关完整的详细信息,请参阅SpringApplicationBuilderJavadoc。

原创不易,如果您喜欢请支持一下我的创作。

支付宝微信
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值