tomcat和tomcat-embed的区别比较
2017年07月16日


1、tomcat和embedded tomcat都是 Apache Tomcat官方发布的,从官网上看,从Tomcat 7开始, tomcat和embedded tomcat版本是同步发布的。如下所示,7.0.78版本:

Core:

  • zip (pgp, md5, sha1)

  • tar.gz (pgp, md5, sha1)

  • 32-bit Windows zip (pgp, md5, sha1)

  • 64-bit Windows zip (pgp, md5, sha1)

  • 32-bit/64-bit Windows Service Installer 

Full documentation:

  • tar.gz (pgp, md5, sha1)

Deployer:

  • zip (pgp, md5, sha1)

  • tar.gz (pgp, md5, sha1)

Embedded:

  • tar.gz (pgp, md5, sha1)

  • zip (pgp, md5, sha1)

同时,也可以看到,独立版tomcat有window 32、64版本和unix版本而embedded tomcat没有区分操作系统

独立版tomcat区分了操作系统,究竟有哪些区别?


2、估计embedded tomcat代码和tomcat应该是一样的,可能做了一些精简,但具体减少了些什么东西,官方并没有说明,但有一点几乎可以确定:独立的tomcat有操作系统native支持和APR特性,但embedded没有这方面的支持。另外,在jmx和可监控性上,embedded tomcat是否支持,比如是否支持以MBean的形式监控embedded tomcat?另外,独立版tomcat支持SSI,我经常用到,embedded tomcat有这个功能,但没有说明文档,只能去翻源代码。

3、从官网每个版本的bugfix列表可以看到,和embedded相关的bug还比较多,embedded的使用上面还不是特别成熟,可能会遇到更多的问题。

4、有一点很重要,embedded tomcat几乎没有任何说明文档,网上资料也太少了,甚至找不到embedded tomcat的性能测试。更别说如果在embedded tomcat上做一些高级特性的配置,只能自己去摸索(我根据源码封装了一个支持SSI embedded tomcat,开源地址:https://github.com/jretty-org/tomcat-embed-boot)。


参考资料:

可以找到很多关于二者的性能测试,那么一般情况下独立的Tomcat性能会高过Spring Boot内置的Tomcat。这是因为独立的tomcat很多都配置了APR特性,而大多数比较的时候Spring Boot内置的Tomcat并没有开启这个特性。你可以选择自己启动这个特性,Spring Boot也有一个issue计划增加APR的支持(https://github.com/spring-projects/spring-boot/issues/7376)


总结:如果是简单应用,也不那么重要,可以使用embedded tomcat,毕竟方便。但如果是大型应用,或者很重要的应用,建议谨慎使用embedded tomcat,因为它使用没有独立版的tomcat广泛,网上资料也少,出了问题或者想做一些扩展和配置,都比较麻烦。