首页 文章 精选 留言 我的

精选列表

搜索[SpringBoot4],共10034篇文章
优秀的个人博客,低调大师

SpringBoot2更换Tomcat为Jetty,小型站点的福音

前言 什么是Jetty Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 Jetty和tomcat的比较 相同点: Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。 不同点: 1.架构比较 Jetty的架构比Tomcat的更为简单 Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。 Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。 2.性能比较 Jetty和Tomcat性能方面差异不大 Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。 Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。 Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高 Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。 Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。 3.其它比较 Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。 Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。 编码 1.添加Jetty容器Jar包 修改pom.xml文件 将 xml 复制代码 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 修改为 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> 2.启动服务器 即可看到Servlet容器已经发生了改变 总结:由于Jetty的有点,有些公司采用Jetty服务器,本文主要讲解在工程中如何替换Tomcat为Jetty,当然建议改操作在搭建项目框架的时候就去替换了,因为个人经验,写了很多代码在工程中后再去替换,翻车的概率还是很高的。

优秀的个人博客,低调大师

SpringBoot 优雅停服

一、介绍 当外部流量请求到服务端接口执行业务逻辑的时候,若服务端此时执行关机 (kill),spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况,事务逻辑不会回滚。 在最新的 spring boot 2.3 版本,内置此功能,不需要再自行扩展容器线程池来处理, 目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。 此处支持的 shutdown 行为,我们看下源码枚举如下: public enum Shutdown { /** * 优雅停机 (限期停机) * */ GRACEFUL, /** * 立即停机 */ IMMEDIATE; } 二、使用 当使用server.shutdown=graceful启用时,在 web 容器关闭时,web 服务器将不再接收新请求,并将等待活动请求完成的缓冲期。 缓冲期 timeout-per-shutdown-phase 配置:默认时间为 30S, 意味着最大等待 30S,超时候无论线程任务是否执行完毕都会停机处理,一定要根据项目实际需要合理设置。 以上配置完毕,重新发布以后,服务端就支持优雅停服。 三、触发优雅停服 1、对进城PID执行kill -2 而不是 kill -9 kill -9,暴力美学强制杀死进程,不会执行 ShutdownHook;但是 kill -2 相当于快捷键 Ctrl + C 会触发 Java 的 ShutdownHook 事件处理进行优雅停机或者一些后置处理。可参考以下源码: @Override public void registerShutdownHook() { if (this.shutdownHook == null) { // No shutdown hook registered yet. this.shutdownHook = new Thread(SHUTDOWN_HOOK_THREAD_NAME) { @Override public void run() { synchronized (startupShutdownMonitor) { doClose(); } } }; Runtime.getRuntime().addShutdownHook(this.shutdownHook); } } 2、通过 actuate 端点实现优雅停机 POST 请求 /actuator/shutdown 即可执行优雅关机。源码解析如下: @Endpoint(id = "shutdown", enableByDefault = false) public class ShutdownEndpoint implements ApplicationContextAware { @WriteOperation public Map<String, String> shutdown() { Thread thread = new Thread(this::performShutdown); thread.setContextClassLoader(getClass().getClassLoader()); thread.start(); } private void performShutdown() { try { Thread.sleep(500L); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } // 此处close 逻辑和上边 shutdownhook 的处理一样 this.context.close(); } } 三、不同spring boot嵌入式 web 容器优雅停机行为区别 -------------------------------------- 版权声明:本文为【PythonJsGo】博主的原创文章,转载请附上原文出处链接及本声明。 博主主页:https://my.oschina.net/u/3375733 本篇文章同步在个人公众号:

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。