一、Spring Boot中的嵌入式服务器简介
Spring Boot内置了几种常见的服务器,如Tomcat、Jetty和Undertow。默认情况下,Spring Boot使用Tomcat作为嵌入式服务器。通过嵌入式服务器,Spring Boot应用可以以独立的Java应用程序运行,无需外部的Web服务器。
二、配置嵌入式服务器
1. 修改默认端口
默认情况下,Spring Boot使用端口8080。可以在application.properties
或application.yml
文件中配置端口号。
application.properties
server.port=9090
application.yml
server: port: 9090
2. 配置Tomcat嵌入式服务器
可以通过编程方式配置Tomcat嵌入式服务器的属性。例如,配置最大线程数和连接超时时间。
代码示例
package cn.juwatech.config; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatConfig { @Bean public WebServerFactoryCustomizer<TomcatServletWebServerFactory> customizer() { return factory -> { factory.setPort(9090); factory.setContextPath("/myapp"); factory.addConnectorCustomizers(connector -> { connector.setProperty("maxThreads", "200"); connector.setProperty("connectionTimeout", "20000"); }); }; } }
3. 使用Jetty作为嵌入式服务器
如果希望使用Jetty作为嵌入式服务器,可以在pom.xml
中引入相应的依赖,并排除Tomcat依赖。
pom.xml
<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>
4. 使用Undertow作为嵌入式服务器
类似地,可以在pom.xml
中引入Undertow的依赖,并排除Tomcat依赖。
pom.xml
<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>
5. 配置SSL
可以通过配置SSL来增强嵌入式服务器的安全性。需要在application.properties
或application.yml
文件中配置SSL相关的属性。
application.properties
server.port=8443 server.ssl.key-store=classpath:keystore.p12 server.ssl.key-store-password=yourpassword server.ssl.keyStoreType=PKCS12 server.ssl.keyAlias=tomcat
三、嵌入式服务器高级配置
1. 自定义Servlet、Filter和Listener
可以通过@Bean方式自定义Servlet、Filter和Listener。
代码示例
package cn.juwatech.config; import javax.servlet.Filter; import javax.servlet.Servlet; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class WebConfig { @Bean public ServletRegistrationBean<Servlet> myServlet() { return new ServletRegistrationBean<>(new HttpServlet() { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("Hello, this is my custom servlet!"); } }, "/myServlet"); } @Bean public FilterRegistrationBean<Filter> myFilter() { FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter((request, response, chain) -> { System.out.println("This is my custom filter"); chain.doFilter(request, response); }); registrationBean.addUrlPatterns("/*"); return registrationBean; } @Bean public ServletListenerRegistrationBean<ServletContextListener> myListener() { return new ServletListenerRegistrationBean<>(new ServletContextListener() { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("This is my custom listener"); } @Override public void contextDestroyed(ServletContextEvent sce) { } }); } }
四、总结
Spring Boot的嵌入式服务器配置为我们提供了灵活性和便利性。无论是使用默认的Tomcat,还是替换为Jetty或Undertow,都可以通过简单的配置来实现。同时,通过配置SSL、自定义Servlet、Filter和Listener等高级配置,可以进一步增强应用的功能和安全性。