1.概述
Spring Boot可以做很多事情; 在本教程中,我们将介绍Boot中一些更有趣的配置选项。
2.端口号
在独立应用程序中,HTTP端口默认为8080; 我们可以轻松配置Boot以使用不同的端口:(properties文件配置)
1 server.port=8083
对于基于YAML文件的配置:
1 server: 2 port: 8083
我们还可以以编程方式自定义服务器端口:
1 @Component 2 public class CustomizationBean implements 3 WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { 4 5 @Override 6 public void customize(ConfigurableServletWebServerFactory container) { 7 container.setPort(8083); 8 } 9 }
3.上下文路径
默认情况下,上下文路径为“/”。如果这不是理想的,你需要改变它 - 像/ app_name这样,下面是通过配置文件快速简单配置的方法:
server.servlet.contextPath=/springbootapp
对于基于YAML的配置:
server:
servlet:
contextPath:/springbootapp
最后 - 改变也可以通过编程方式完成:
1 @Component 2 public class CustomizationBean 3 implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { 4 5 @Override 6 public void customize(ConfigurableServletWebServerFactorycontainer) { 7 container.setContextPath("/springbootapp"); 8 } 9 }
4.默认错误页面
如果未在配置中指定任何自定义实现,则Spring Boot会自动注册BasicErrorController这个
Bean。
当然可以配置此默认控制器:
1 public class MyCustomErrorController implements ErrorController { 2 3 private static final String PATH = "/error"; 4 5 @GetMapping(value=PATH) 6 public String error() { 7 return "Error haven"; 8 } 9 10 @Override 11 public String getErrorPath() { 12 return PATH; 13 } 14 }
5.自定义错误消息
默认情况下,Boot提供/错误页映射以合理的方式处理错误。
如果要配置更具体的错误页面,可以很好地支持统一的Java DSL来自定义错误处理:
1 @Component 2 public class CustomizationBean 3 implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { 4 5 @Override 6 public void customize(ConfigurableServletWebServerFactorycontainer) { 7 container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); 8 container.addErrorPages(new ErrorPage("/errorHaven")); 9 } 10 }
在这里,我们专门处理Bad Request以匹配/ 400路径以及所有其他路径以匹配公共路径。
6.以编程方式关闭引导应用程序
您可以在SpringApplication的帮助下以编程方式关闭Boot应用程序。这有一个静态的exit()方法,它接受两个参数:ApplicationContext和ExitCodeGenerator:
1 @Autowired 2 public void shutDown(ExecutorServiceExitCodeGenerator exitCodeGenerator) { 3 SpringApplication.exit(applicationContext, exitCodeGenerator); 4 }
通过这种实用方法,我们可以关闭应用程序。
7.配置日志级别
您可以轻松调整Boot应用程序中的日志记录级别 ; 从1.2.0版开始,您可以在主属性文件中配置日志级别:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
就像使用标准Spring应用程序一样 - 您可以通过在类路径中添加自定义XML或属性文件并在pom中定义库来激活不同的日志记录系统,如Logback,log4j,log4j2等。
8.注册一个新的Servlet
如果您在嵌入式服务器的帮助下部署应用程序,则可以通过将它们作为传统配置中的bean公开,在Boot应用程序中注册新的Servlet :
1 @Bean 2 public HelloWorldServlet helloWorld() { 3 return new HelloWorldServlet(); 4 }
或者,您可以使用ServletRegistrationBean :
@Bean public SpringHelloServletRegistrationBean servletRegistrationBean() { SpringHelloServletRegistrationBean bean = new SpringHelloServletRegistrationBean( new SpringHelloWorldServlet(), "/springHelloWorld/*"); bean.setLoadOnStartup(1); bean.addInitParameter("message", "SpringHelloWorldServlet special message"); return bean; }
9.在引导应用程序中配置Jetty或Undertow
Spring Boot启动程序通常使用Tomcat作为默认的嵌入式服务器。如果需要更改 - 您可以排除Tomcat依赖项并改为包含Jetty或Undertow:
配置Jetty
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
@Bean public JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory() { JettyEmbeddedServletContainerFactory jettyContainer = new JettyEmbeddedServletContainerFactory(); jettyContainer.setPort(9000); jettyContainer.setContextPath("/springbootapp"); return jettyContainer; }
配置Undertow
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency>
@Bean public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() { UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory(); factory.addBuilderCustomizers(new UndertowBuilderCustomizer() { @Override public void customize(io.undertow.Undertow.Builder builder) { builder.addHttpListener(8080, "0.0.0.0"); } }); return factory; }
10.结论
在这篇快速文章中,我们讨论了一些更有趣和有用的Spring Boot配置选项。