马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。在很多情况下, 你只需委托给 SpringApplication.run这个静态方法 :- @SpringBootApplication
- public class SpringbootLearningApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringbootLearningApplication.class, args);
- }
- }
复制代码 当应用启动时, 你应该会看到类似下面的东西:
默认情况下会显示INFO级别的日志 信息, 包括一些相关的启动详情, 比如启动应用的用户等。
自界说Banner
通过在classpath下添加一个banner.txt或设置banner.location来指定相应的文件可以改变启动过程中打印的banner。如果这个文件有特殊的编码,你可以使用banner.encoding设置它(默认为UTF-8)。
在banner.txt中可以使用如下的变量:
变量描述application.versionMANIFEST.MF中声明的应用版本号, 比方1.0application.formatted- versionMANIFEST.MF中声明的被格式化后的应用版本号(被括号包裹且以v作为前缀),用于显 示,比方(v1.0)spring-boot.version正在使用的Spring Boot版本号, 比方3.2.3spring-boot.formatted-version正在使用的Spring Boot被格式化后的版本号(被括号包裹且以v作为前缀), 用于显示,比方(v3.2.3)注:如果想以编程的方式产生一个banner,可以使用SpringBootApplication.setBanner(…)方法。使用org.springframework.boot.Banner接口,实现你自己的printBanner()方法。
自界说SpringApplication
如果默认的SpringApplication不符合你的口味,你可以创建一个当地的实例并自界说它。比方,关闭banner你可以这样写:- @SpringBootApplication
- public class SpringbootLearningApplication {
- public static void main(String[] args) {
- SpringApplication app =new SpringApplication(SpringbootLearningApplication.class);
- app.setBannerMode(Banner.Mode.OFF);
- app.run(args);
- }
- }
复制代码 注:传递给SpringApplication的构造器参数是spring beans的配置源。在大多数情况下,这些将是@Configuration类的引用,但它们也大概是XML配置或要扫描包的引用。
Application变乱和监听器
除了常见的Spring框架变乱,比如ContextRefreshedEvent,一个SpringApplication也发送一些额外的应用变乱。一些变乱实际上是在ApplicationContext被创建前触发的。
你可以使用多种方式注册变乱监听器,最普通的是使用SpringApplication.addListeners(…)方法。在你的应用运行时,应用变乱会以下面的序次发送:
- 在运行开始,但除了监听器注册和初始化以外的任何处理之前,会发送一个ApplicationStartedEvent。
- 在Environment将被用于已知的上下文,但在上下文被创建前,会发送一个ApplicationEnvironmentPreparedEvent。
- 在refresh开始前,但在bean界说已被加载后,会发送一个ApplicationPreparedEvent。
- 启动过程中如果出现异常,会发送一个ApplicationFailedEvent。
注 :你通常不需要使用应用步伐变乱, 但知道它们的存在会很方便(在某些场合大概会使用到)。在Spring内部, Spring Boot使用变乱处理各种各样的任务。
Web情况
一个SpringApplication将尝试为你创建精确类型的ApplicationContext。在默认情况下,使用AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext取决于你正在开发的是否是web应用。
用于确定一个web情况的算法相当简单(基于是否存在某些类)。如果需要覆盖默认举动,你可以使用setWebEnvironment(boolean webEnvironment)。通过调用setApplicationContextClass(…),你可以完全控制ApplicationContext的类型。
注: 当JUnit测试里使用SpringApplication时,调用setWebEnvironment(false)是可取的。
命令行启动器
如果你想获取原始的命令行参数,或一旦SpringApplication启动,你需要运行一些特定的代码,你可以实现CommandLineRunner接口。在全部实现该接口的Spring beans大将调用run(String … args)方法。- @Component
- public class MyBean implements CommandLineRunner {
- @Override
- public void run(String... args) throws Exception {
- System.out.println("启动前执行");
- }
- }
复制代码 如果一些CommandLineRunner beans被界说必须以特定的序次调用, 你可以额外实现org.springframework.core.Ordered接口或使用org.springframework.core.annotation.Order注解。
Application退出
每个SpringApplication在退出时为了确保ApplicationContext被优雅的关闭, 将会注册一个JVM的shutdown钩子。全部标准的Spring生命周期回调(比如, DisposableBean接口或@PreDestroy注解)都能使用。
此外, 如果beans想在应用竣事时返回一个特定的退出码(exit code),可以实现org.springframework.boot.ExitCodeGenerator接口。
|