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广泛,网上资料也少,出了问题或者想做一些扩展和配置,都比较麻烦。