标签:log setw new XML debug gem initial lin err
1、启动失败
如果你启动项目失败,你通过注册FailureAnalyzers
来获取错误信息和解决办法。比如你启动应用的8080端口被占用了,你将看到如下信息:
*************************** APPLICATION FAILED TO START *************************** Description: Embedded servlet container failed to start. Port 8080 was already in use. Action: Identify and stop the process that‘s listening on port 8080 or configure this application to listen on another port.
Spring Boot提供了大量的FailureAnalyzer
实现类,同时你也可以实现一个自己的。
你还可以通过打开debug属性或者在log日志配置org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer来让Exception更加容易理解。
打开debug属性可以启动命令后面加 --debug
$ java -jar myproject-0.0.1-SNAPSHOT.jar --debug
2、定制横幅
启动时候的横幅可以通过在classpath下面添加一个banner.txt,当然你也可以通过属性文件的banner.location指定文件和banner.charset指定文件编码(默认UTF-8)。也可以通过在classpath下添加banner.png、banner.gif、banner.jpg来替换横幅为图片,或者设置属性banner.image.location指定图片,图片将会转换文本形式显示出来。
横幅内部可以通过EL表达式使用以下属性:
${application.version} MANIFEST.MF文件中的版本号,如Implementation-Version: 1.0将会打印成1.0
${application.formatted-version} 也是打印版本号,不过版本号前面会加个v
${spring-boot.version} springboot版本
${spring-boot.formatted-version} 也是springboot版本,前面加个v
${application.title} MANIFEST.MF定义的应用名称,如Implementation-Title: MyApp将会打印MyApp
也可以通过SpringApplication.setBanner(…?)方式来设置横幅,实现org.springframework.boot.Banner接口的printBanner()方法来生成你的横幅。
可以通过设置spring.main.banner-mode属性来设置横幅展示与否(log,off)。
3、定制SpringApplication
如果官方自带的SpringApplication 不合你的口味,你可以自定义一个,比如,关闭Banner你可以这样写:
public static void main(String[] args) { SpringApplication app = new SpringApplication(MySpringConfiguration.class); app.setBannerMode(Banner.Mode.OFF); app.run(args); }
构造函数传给SpringApplication 的参数是SpringBeans的项目配置,多数情况下可以参考@Configuration类或者被扫描的xml。
同时,也可以通过属性文件来配置这些,后面会做介绍。
4、Fluent Builder API
你如果需要建立一个多层ApplicationContext(多个父子关系的Context),可以使用Fluent Builder API, 用类SpringApplicationBuilder实现。例如:
new SpringApplicationBuilder() .sources(Parent.class) .child(Application.class) .bannerMode(Banner.Mode.OFF) .run(args);
更多请了解SpringApplicationBuilder的API文档:https://docs.spring.io/spring-boot/docs/1.5.7.RELEASE/api/org/springframework/boot/builder/SpringApplicationBuilder.html
5、应用事件与监听器
除了SpringFramework常用的事件ContextRefreshedEvent外,SpringApplication也添加了很多事件。
很多事件在SpringApplication创建之前就被触发了,所以你不能以Bean的形式对这些事件注册监听器。
你可以通过SpringApplication.addListeners(…?)或SpringApplicationBuilder.listeners(…?)方法来注册他们。
如果你想让你的监听器能自动创建且不受SpringApplication的创建影响,你可以在项目中添加META-INF/spring.factories文件并设置org.springframework.context.ApplicationListener的值为监听器的类,如下:
org.springframework.context.ApplicationListener=com.example.project.MyListener
以下为常见事件:
ApplicationStartingEvent在应用启动之后、listeners 和initializers注册之前触发。
ApplicationEnvironmentPreparedEvent在Context启动前准备使用Environment之前触发。
ApplicationPreparedEvent在刷新后、定义的Bean被加载前。
ApplicationReadyEvent在刷新后所有的回调函数执行已经执行完、应用已经准备好相应请求。
ApplicationFailedEvent在启动时应用抛出异常触发。
6、Web环境变量
SpringApplication会试图建立一个正确的ApplicationContext来维护你的利益。默认情况下,会根据你是否在开发环境下启动来启动AnnotationConfigApplicationContext还是AnnotationConfigEmbeddedWebApplicationContext。
判断环境变量的方法是相当简单的(通过少数类来判断),你可以通过setWebEnvironment(boolean webEnvironment)来直接设置。
7、参数
如果你要给SpringApplication.run(…?)传入参数,你可以注入org.springframework.boot.ApplicationArguments对象,ApplicationArguments提供了访问String[]参数的入口,如下:
import org.springframework.boot.* import org.springframework.beans.factory.annotation.* import org.springframework.stereotype.* @Component public class MyBean { @Autowired public MyBean(ApplicationArguments args) { boolean debug = args.containsOption("debug"); List<String> files = args.getNonOptionArgs(); // if run with "--debug logfile.txt" debug=true, files=["logfile.txt"] } }
你也可以注册CommandLinePropertySource,通过@Value注解来注入参数。
8、ApplicationRunner 或 CommandLineRunner
如果你需要在SpringApplication启动后执行一些代码,你可以实现ApplicationRunner 或 CommandLineRunner。这两个方法会在SpringApplication的run方法执行完后执行run方法。
import org.springframework.boot.* import org.springframework.stereotype.* @Component public class MyBean implements CommandLineRunner { public void run(String... args) { // Do something... } }
你可以通过实现org.springframework.core.Ordered接口或使用org.springframework.core.annotation.Order注解来在特定代码中调用对应的ApplicationRunner 或 CommandLineRunner的bean。
9、SpringApplication 应用退出
每一个SpringApplication都会在JVM注册一个程序关闭的钩子来保证应用优雅关闭。所有的Spring标准生命周期函数(如DisposableBean接口、或@PreDestroy)都会被执行。
你可以通过实现org.springframework.boot.ExitCodeGenerator接口。接口将会返回 特定的状态码,当SpringApplication.exit()被调用后,将与改代码作为状态码返回。
@SpringBootApplication public class ExitCodeApplication { @Bean public ExitCodeGenerator exitCodeGenerator() { return new ExitCodeGenerator() { @Override public int getExitCode() { return 42; } }; } public static void main(String[] args) { System.exit(SpringApplication .exit(SpringApplication.run(ExitCodeApplication.class, args))); } }
而ExitCodeGenerator接口为退出异常调用的接口。
10、Admin
通过属性 spring.application.admin.enabled 可以打开SpringApplication的admin-related特征,这将会在MBeanServer平台暴露SpringApplicationAdminMXBean接口。你可以通过此对SpringApplication进行远程管理。
如果你想知道它在哪个端口运行,可以查询属性local.server.port的值。
springboot SpringApplication 的十大特性
标签:log setw new XML debug gem initial lin err
原文地址:http://www.cnblogs.com/qins/p/7529182.html