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文件中,您可以使用以下任何占位符:
Variable | Description |
---|---|
${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。
原创不易,如果您喜欢请支持一下我的创作。
支付宝 | 微信 |
---|---|
![]() | ![]() |