Spring Boot项目的内嵌容器
一、关于容器
刚才开始使用spring boot的开发者会有种很直观的感觉,servlet容器“不见了”。之前开发web项目,都是把程序写完后部署到servlet容器(比如Tomcat),但是使用spring boot开发项目,写完程序后直接就能运行了,觉得些许奇怪! 其实呢,这是因为Spring Boot中内嵌了Tomcat、Jetty和Undertow服务器。之所以开发者在默认情况下不需要做任何配置,是因为spring boot提供了一个名为EmbeddedServletContainerAutoConfiguration的配置类 (@Configuration注解的类),spring boot能实现“零配置”,是因为spring定义了好多这样的配置类(配置没有少,只是以前由开发者自己的工作交由spring完成了),这种情况下大多数开发人员将只需使用适当的“启动器”来获得一个完全配置的实例。spring-boot-starter-web默认使用嵌套式的Tomcat作为Web容器对外提供HTTP服务,默认端口8080对外监听和提供服务。但同样可以使用spring-boot-starter-jetty或者spring-boot-starter-undertow作为Web容器。
注意:如果您选择在CentOS上使用Tomcat,默认情况下临时目录是用于存储已编译的jsp、文件上传等。当应用程序运行导致失败时,该目录可以就被tmpwatch删除。为了避免这一点,您可能需要定制您的tmpwatch配置。通过使用server.tomcat.basedir来配置内嵌的Tomcat。
1)内嵌容器选择
- 在pom文件中排除tomcat的starter
<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>
- 增加Jetty依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
2)改变默认的配置端口,可以在application.properties中指定:
server.port = 9000(the port number you want)
3)类似的配置还有:
server.address
server.ssl.*
server.tomcat.*
如果上诉仍然没有办法满足要求,springBoot支持对嵌入式的Web容器实例进行定制,可以通过向IoC容器中注册一个EmbeddedServletContainerCustomizer类型的组件来对嵌入式的Web容器进行定制
public class UnveilSpringEmbeddedTomcatCustomizer implements EmbeddedServletContainer{
public void customize(ConfigurableEmbeddedServletContainer container){
container.setPort(9999);
container.setContextPath("C\\hello");
...
}
}
二、关于servlet、 Filters、listeners
在使用嵌入式servlet容器时,您可以注册servlet、 Filters、listeners 。Servlet规范要么使用Spring bean,要么通过扫描Servlet组件。
1.通过Spring Bean注册servlet、 Filters、listeners
默认情况下,如果上下文只包含一个Servlet,它将被映射到/。在多个情况下。Servlet bean bean的名称将用作路径前缀。过滤器将映射到/*。
如果基于约定的映射不够灵活,可以使用ServletRegistrationBean、FilterRegistrationBean和ServletListenerRegistrationBean类进行完全控制。
Spring Boot附带了许多可以定义过滤器bean的自动配置。下面是一些过滤器的例子和它们各自的顺序(低order value意味着更高的优先级):
Servlet Filter | Order |
---|---|
|
|
|
|
|
|
|
|
通常,让过滤bean处于无序状态是安全的。
如果需要特定的顺序,您应该避免筛选器程序读取请求的Ordered.HIGHEST_PRECEDENCE值。因为它可能违背应用程序的字符编码配置。如果Servlet筛选器包装请求,它应该配置一个小于或等于FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER的顺序。
Spring Boot项目的内嵌容器的更多相关文章
- 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行
实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...
- 将spring boot项目部署到tomcat容器中
一. 我这里用的环境 tomcat: tomcat 8 jdk: jdk 7 spring boot 版本: 1.5 二. 将创建好的spring boot项目做如下修改 2.1. 修改打包形式 在p ...
- 多个Spring Boot项目部署在一个Tomcat容器无法启动
转自https://www.cnblogs.com/tomxin7/p/9434085.html 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样 ...
- Spring Boot移除内嵌Tomcat,使用非web方式启动
前言:当我们使用Spring Boot编写了一个批处理应用程序,该程序只是用于后台跑批数据,此时不需要内嵌的tomcat,简化启动方式使用非web方式启动项目,步骤如下: 1.在pom.xml文件中去 ...
- Spring Boot 容器选择 Undertow 而不是 Tomcat Spring Boot 内嵌容器Unde
Spring Boot 内嵌容器Undertow参数设置 配置项: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 # 不要设置过大,如果过大,启动 ...
- Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现
Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现 Anoyi 精讲JAVA 精讲JAVA 微信号 toooooooozi 功能介绍 讲解java深层次 ...
- 【Spring Boot】内嵌容器
Spring Boot内嵌容器支持Tomcat.Jetty.Undertow. tomcat容器 spring boot 的web应用开发必须使用spring-boot-starter-web,其默认 ...
- spring boot项目发布tomcat容器(包含发布到tomcat6的方法)
spring boot因为内嵌tomcat容器,所以可以通过打包为jar包的方法将项目发布,但是如何将spring boot项目打包成可发布到tomcat中的war包项目呢? 1. 既然需要打包成wa ...
- SpringBoot项目启动不走内嵌容器
一.问题 springboot项目java -jar启动不走内嵌容器,如下图,可以看到是直接走系统环境变量里配置的tomcat容器了 二.分析 我的pom.xml文件关键依赖: <depende ...
随机推荐
- maven之web工程的搭建
参考之前jave application的工程创建的步骤,我们只需要修改最后一步 这样就创建了个web maven工程 与java application应用程序的区别,还有别的区别这里不做多的阐述. ...
- Logging from multiple processes using log4net
When logging with log4net to a file (using the FileAppender), the FileAppender is holding an exclusi ...
- 关于git的ssh permission denied原因汇总
SSH关于公钥认证Permission denied (publickey,gssapi-with-mic的问题 http://h2appy.blog.51cto.com/609721/1112797 ...
- Hdu1016 Prime Ring Problem(DFS) 2016-05-06 14:27 329人阅读 评论(0) 收藏
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hihocoder 二分·二分答案【二分搜索,最大化最小值】 (bfs)
题目 这道题做了几个小时了都没有做出来,首先是题意搞了半天都没有弄懂,难道真的是因为我不打游戏所以连题都读不懂了? 反正今天是弄不懂了,过几天再来看看... 题意:一个人从1点出发到T点去打boss, ...
- js反选
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- EBS 定义显示总帐快码设置
自定义一个功能如下,挂到菜单上就可以了功能 用户功能名 表单 参数GL_GLXDQMLK(自定义) 总帐代码列表 定义代码 VIEW_APPLICATION="SQLGL" HEL ...
- 5.Django高级
管理静态文件 项目中的CSS.图片.js都是静态文件 配置静态文件 在settings 文件中定义静态内容 STATIC_URL = '/static/' STATICFILES_DIRS = [ o ...
- 程序bug导致了天大的损失,要枪毙程序猿吗?[ZZ]
来自猫扑:程序bug导致了天大的损失,要枪毙程序猿吗? 0 引言 年会上Review 源代码算什么? 法庭上 Review code 才带劲..... 2015年9月3日,随着东京最高法院驳回瑞穗证券 ...
- MySQL--binlog和relay log的生成和删除
##================================================================================================== ...