SpringBoot快速搭建WebSocket实现消息推送

一、WebSocket简单介绍   随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。在WebSocket规范提出之前,开发人员若要实现这些实时性较强的功能,经常会使用折衷的解决方法:轮询(polling)和Comet技术。其实后者本质上也是一种轮询,只不过有所改进。   轮询是最原始的实现实时Web应用的解决方案。轮询技术要求客户端以设定的时间间隔周期性地向服务端发送请求,频繁地查询是否有新的数据改动。明显地,这种方法会导致过多不必要的请求,浪费流量和服务器资源。   Comet技术又可以分为长轮询和流技术。长轮询改进了上述的轮询技术,减小了无用的请求。它会为某些数据设定过期时间,当数据过期后才会向服务端发送请求;这种机制适合数据的改动不是特别频繁的情况。流技术通常是指客户端使用一个隐藏的窗口与服务端建立一个HTTP长连接,服务端会不断更新连接状态以保持HTTP长连接存活;这样的话,服务端就可以通过这条长连接主动将数据发送给客户端;流技术在大并发环境下,可能会考验到服务端的性能。 这两种技术都是基于请求-应答模式,都不算是真正意义上的实时技术;它们的每一次请求、应答,都浪费了一定流量在相同的头部信息上,并且开发复杂度也较大。 伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,使B/S模式具备了C/S模式的实时通信能力。WebSocket的工作流程是这样的:浏览器通过JavaScript向服务端发出建立WebSocket连接的请求,在WebSocket连接建立成功后,客户端和服务端就可以通过TCP连接传输数据。因为WebSocket连接本质上是TCP连接,不需要每次传输都带上重复的头部数据,所以它的数据传输量比轮询和Comet技术小了很多。本文不详细地介绍WebSocket规范,主要介绍下WebSocket在Java Web中的实现。 JavaEE7中出了JSR-356:(Java API for WebSocket规范,当Java开发者需要在应用程序中集成WebSocket时,就可以使用此API—服务端和客户端均可。每个声明兼容JSR 356的WebSocket协议,都必须实现这个API。)不少Web容器,如Tomcat,Nginx,Jetty等都支持WebSocket。Tomcat从7.0.27开始支持 WebSocket,从7.0.47开始支持JSR-356,下面的Demo代码也是需要部署在Tomcat7.0.47以上的版本才能运行。 二、客户端实现WebSocket <%@ page language=”java”…

Continue Reading →

SpringBoot2集成Swagger2

一、pom <!– swagger config –> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger.version}</version> </dependency> 二、config /* * Copyright (c)…

Continue Reading →

SpringBoot配置log4j2

在项目推进中,如果说第一件事是搭Spring框架的话,那么第二件事情就是在Sring基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上Web项目,因为日志可能是我们了解应用如何执行的唯一方式。在18年大环境下,更多的企业使用Springboot和Springcloud来搭建他们的企业微服务项目,此篇文章是博主在实践中用Springboot整合log4j2日志的总结。 常用日志框架 java.util.logging:是JDK在1.4版本中引入的Java原生日志框架 Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。 LogBack:是Log4j的一个改良版本 Log4j2:Log4j2已经不仅仅是Log4j的一个升级版本了,它从头到尾都被重写了 日志门面slf4j 上述介绍的是一些日志框架的实现,这里我们需要用日志门面来解决系统与日志实现框架的耦合性。SLF4J,即简单日志门面(Simple Logging Facade for Java),它不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志实现。 前面介绍的几种日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。 使用了slf4j后,对于应用程序来说,无论底层的日志框架如何变,应用程序不需要修改任意一行代码,就可以直接上线了。 为什么选用log4j2 相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生; 在这列举一下一些网上其他博文中对它们的性能评测: 可以看到在同步日志模式下,…

Continue Reading →

SpringBoot2配置Druid数据源

一、前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringData的方式进行统一管理,添加大量的自动配置,屏蔽了很多设置。引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层的操作。 springboot2.0默认是用com.zaxxer.hikari.HikariDataSource作为数据源。 2.0以下默认采用的是org.apache.tomcat.jdbc.pool.DataSource作为数据源。 Hikari的官方网站:http://brettwooldridge.github.io/HikariCP/ Hikari号称JAVA领域中最快的数据连接池,你可去点连接进去看看,第一行就是说他自己多么厉害,秒杀什么什么的,不过再快我也觉得没有阿里巴巴奉献给apache的Druid好,因为阿里巴巴的服务周到,里面有监控中心,可以帮助我们快速定位慢sql等。 Druid官方网站:http://druid.io/ 为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用参考这篇博客:点击 注意事项:默认情况下使用com.zaxxer.hikari.HikariDataSource获取数据源时会抛出一个异常。说时区不对,需要我们修改mysql的时区: SHOW VARIABLES LIKE ‘%time_zone%’ SET GLOBAL time_zone=”+8:00″ 二、使用Druid数据源 Apache Druid(Incubating) –…

Continue Reading →

利用mybatis-generator自动生成代码

mybatis-generator有三种用法:命令行、eclipse插件、maven插件。个人觉得maven插件最方便,可以在eclipse/intellij idea等ide上可以通用。 下面是从官网上的截图:(不过官网www.mybatis.org 最近一段时间,好象已经挂了) 一、在pom.xml中添加plugin <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>src/main/resources/mybatis-generator/generatorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal>…

Continue Reading →

Eclipse安装activiti工作流插件

一、在线安装 1、点击eclipse上方工具栏的Help,选择Install New Software 2、弹出如下窗口,然后填写插件名称和安装地址 Name: Activiti BPMN 2.0 designer Location: http://activiti.org/designer/update/ 之后不停的next和finish,图如下: 3、安装完成后,我们在new的时候,操作面板中便有activiti的相关文件了。 二、离线安装 1、下载地址:http://www.activiti.org/designer/archived/activiti-designer-5.18.0.zip 2、还是在上述对话框中,只是不再输入url,而是点击 Archive… 选择已经下来的zip离线包(.zip) 参考地址:https://www.cnblogs.com/mingforyou/p/5347561.html

Continue Reading →

IntelliJ IDEA安装Activiti插件并使用

一、安装Activiti插件 1.搜索插件 点击菜单【File】–>【Settings…】打开【Settings】窗口。 点击左侧【Plugins】按钮,在右侧输出"actiBPM",点击下面的【Search in repositories】链接会打开【Browse Repositories】窗口。 2.开始安装 进入【Browse Repositories】窗口,选中左侧的【actiBPM】,点击右侧的【Install】按钮,开始安装。 3.安装进度 4.安装完成 安装完成后,会提示【Restart IntelliJ IDEA】,重启IDEA即可完成安装。 5.查看结果 打开【Settings】窗口,在【Plugins】中可看到安装的【actiBPM】插件,表示安装成功。 二、使用Activiti 1.创建BPMN文件 点击菜单【File】–>【New】–>【BpmnFile】…

Continue Reading →

纵观 jBPM:从 jBPM3 到 jBPM5 以及 Activiti5

前言 对jBPM来说,今年最大的事件莫过于 jBPM 的创建者Tom Baeyens离开 JBoss 了。Tom Baeyens 离开的具体原因尚不清楚,但他的离开产生了两个结果:一是 jBPM 的下一个版本 jBPM5 完全放弃了 jBPM4 的基础代码,基于Drools Flow重头来过;二是 Tom Baeyens 加入Alfresco后很快推出了新的基于 jBPM4…

Continue Reading →