jetty

新特性:这招牛逼,Spring Boot 2.3.0 如何优雅停机?

半腔热情 提交于 2020-08-07 07:06:46
原文: https://mp.weixin.qq.com/s/uvNkdcmwkd6lcSRDhjPUJQ 1.什么是优雅停机 先来一段简单的代码, 如下: @RestController public class DemoController { @GetMapping("/demo") public String demo() throws InterruptedException { // 模拟业务耗时处理流程 Thread.sleep(20 * 1000L); return "hello"; } } 当我们流量请求到此接口执行业务逻辑的时候, 若服务端此时执行关机 (kill), spring boot 默认情况会直接关闭容器(tomcat 等), 导致此业务逻辑执行失败。在一些业务场景下:会出现数据不一致的情况, 事务逻辑不会回滚。 2.graceful shutdown 在最新的 spring boot 2.3 版本, 内置此功能, 不需要再自行扩展容器线程池来处理, 目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。我们来看下如何使用: 当使用 server.shutdown=graceful 启用时, 在

WebSocket 详解教程

你说的曾经没有我的故事 提交于 2020-08-06 06:31:01
概述 WebSocket 是什么? WebSocket 是一种网络通信协议。 RFC6455 定义了它的通信标准。 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 为什么需要 WebSocket ? 了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。 这种通信模型有一个弊端:HTTP 协议无法实现服务器主动向客户端发起消息。 这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。大多数 Web 应用程序将通过频繁的异步 JavaScript 和 XML(AJAX)请求实现长轮询。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。 因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。WebSocket 连接允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。这相比于轮询方式的不停建立连接显然效率要大大提高。 WebSocket 如何工作? Web 浏览器和服务器都必须实现 WebSockets 协议来建立和维护连接。由于 WebSockets

js WebUploader 分片上传

一个人想着一个人 提交于 2020-08-05 12:14:12
前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对 Http 协议较模糊,故这次采用渐进的方式来学习文件上传的原理与实践。该博客重在实践。 一. Http协议原理简介 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。 1.特点: (1)支持客户/服务器模式。 (2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。 (3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。 (4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 (5

How to use Jetty with Let's Encrypt certificates?

那年仲夏 提交于 2020-08-04 04:33:52
问题 I want to use certificates from Let's Encrypt with a large count of Jetty servers. One of the problems is that the certificates from Let's Encrypt has a lifetime of 90 days. To handle this the Jetty server or some extra code must renew the certificate frequently. Can Jetty handle this self? If yes how can I enable this? If I need to implement it self with a Java client then how can I replace the certificate dynamically via Jetty API without a restart of the Jetty server? Edit: Some related

How to use Jetty with Let's Encrypt certificates?

雨燕双飞 提交于 2020-08-04 04:33:43
问题 I want to use certificates from Let's Encrypt with a large count of Jetty servers. One of the problems is that the certificates from Let's Encrypt has a lifetime of 90 days. To handle this the Jetty server or some extra code must renew the certificate frequently. Can Jetty handle this self? If yes how can I enable this? If I need to implement it self with a Java client then how can I replace the certificate dynamically via Jetty API without a restart of the Jetty server? Edit: Some related

How to use Jetty with Let's Encrypt certificates?

情到浓时终转凉″ 提交于 2020-08-04 04:33:32
问题 I want to use certificates from Let's Encrypt with a large count of Jetty servers. One of the problems is that the certificates from Let's Encrypt has a lifetime of 90 days. To handle this the Jetty server or some extra code must renew the certificate frequently. Can Jetty handle this self? If yes how can I enable this? If I need to implement it self with a Java client then how can I replace the certificate dynamically via Jetty API without a restart of the Jetty server? Edit: Some related

How to use Jetty with Let's Encrypt certificates?

拟墨画扇 提交于 2020-08-04 04:33:12
问题 I want to use certificates from Let's Encrypt with a large count of Jetty servers. One of the problems is that the certificates from Let's Encrypt has a lifetime of 90 days. To handle this the Jetty server or some extra code must renew the certificate frequently. Can Jetty handle this self? If yes how can I enable this? If I need to implement it self with a Java client then how can I replace the certificate dynamically via Jetty API without a restart of the Jetty server? Edit: Some related

做一个完整的Java Web项目需要掌握哪些技术?

混江龙づ霸主 提交于 2020-07-28 03:26:44
做一个完整的Java Web项目需要掌握哪些技术? 2017-12-19 10:39:41 来源: Deamon Thread 收藏 我要投稿 最近自己做了几个 Java Web项目,有公司的商业项目,也有个人做着玩的小项目,写篇文章记录总结一下收获,列举出在做项目的整个过程中,所需要用到的技能和知识点,带给还没有真正接触过完整javaWeb项目的同学一个比较完整的视角,提供一个所谓的“大局观”,也以便于同学们更有针对性地学习。当然,这里所用到的例子项目是非常初级,简单的项目,所以大神们就可以不用往下看了。 首先我们从网站的架构谈起。一般来说,我们将网站分为前端和后端。前端主要负责页面的展示,后端则是业务逻辑的实现。由于HTML5的兴起,前端领域已经越来越火热,前端技术发展极快,今天我们不做过多介绍,因为现在的互联网公司,前端工程师和Java工程师是完全不同的两种技术岗位。所以我们还是以Java的角度去看待一个项目。在前端没有那么火的前几年,或者说在经典的Java Web的开发模式中,我们使用Jsp技术来作为展现层的实现,其实也就是所谓的前端。当然只懂得Jsp是不够的还需要懂html,css,js,ajax等一些前端的基础技术,Jsp技术在其中扮演外层包装的角色。那么后端呢?后端是由于一些实现了业务逻辑Java代码和 数据库 组成。说到这,就可以推出Web开发中经典的MVC模式

Spring和Springboot相关知识点整理

吃可爱长大的小学妹 提交于 2020-07-25 19:58:00
简介 本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做没有深入的讲解。 1. 思维导图 右键新窗口打开可以放大。 说明 使用@Configuration在java代码中声明一个bean——而不是使用xml——实际上很早就有了(至少在《Spring实战(第3版)》出版时,也就是Spring3.0时),我一直以为是SpringBoot的新特性。 2. Spring 2.1 AOP术语 通知Advice —— 切面要做什么,何时执行。何时,包括方法调用前、方法调用后、方法成功调用后、方法调用抛异常后、环绕(Around)。环绕允许提供一些需要跨越方法调用前后的功能,如计算调用耗时。 连接点Joinpoint —— 应用执行时能插入切面的点。实际上是一个逻辑概念,不体现在配置中。 切点Pointcut —— 执行通知的具体的连接点。 切面Aspect —— 通知+切点 引入Introduction —— 允许为类添加新的方法或属性。(个人理解即应用使用切面中的方法和属性,就好像这些方法和属性是原生的一样。可以参考<aop:declare-parents>元素) 织入Weaving —— 将切面应用到目标对象创建新的代理对象的过程,Spring使用的是运行时。编译期和类加载时是其他的方式。 2.2 Bean的生命周期 虽然被称为生命周期

jetty启动

时光总嘲笑我的痴心妄想 提交于 2020-07-25 03:06:41
在idea中配置jetty 第一步:在pom.xml中配置jetty插件 <plugins> <!-- jetty插件 --> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.26</version> <configuration> <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory> <scanIntervalSeconds>3</scanIntervalSeconds> <contextPath>/</contextPath> <connectors> <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> <port>8081</port> </connector> </connectors> </configuration> </plugin> </plugins> 第二步 第三步写名字和命令行 org.mortbay.jetty:maven-jetty-plugin:6.1.22:run 在Runner选项下,在VM Options中配置启动端口号: