企业开发常用功能(下)
本篇继续学习在企业开发过程中经常会使用到的一些功能,主要是批处理、Swagger2和数据校验等。
批处理Spring Batch简介 Spring Batch是一个开源的、全面的、轻量级的批处理框架,通过Spring Batch可以实现强大的批处理应用程序的开发。Spring Batch还提供记录/跟踪、事务管理、作业处理统计、作业重启以及资源管理等功能。Spring Batch结合定时任务可以发挥更大的作用。 Spring Batch提供了ItemReader、ItemProcessor和ItemWriter来完成数据的读取、处理以及写出操作,并且可以将批处理的执行状态持久化到数据库中。接下来通过一个简单的数据复制来学习如何在SpringBoot中如何使用Spring Batch。
整合SpringBoot案例说明,现在有一个data.csv文件,该文件保存了5条用户数据,现要求通过批处理框架来读取data.csv文件,进而将其插入到数据表中。data.csv文件的内容为:
123456id username address gender1 张三 深圳 男2 李四 广州 男3 王 ...
企业开发常用功能(上)
本篇来学习在企业开发过程中经常会使用到的一些功能,如邮件发送、定时任务等功能。
邮件发送邮件发送是一个非常常见的功能,注册时的身份认证、重要通知发送等都会使用到邮件来发送。Sun公司提供了JavaMail用来实现邮件发送,但是配置烦琐, Spring中提供了JavaMailSender用来简化邮件配置,而SpringBoot则提供了MailSenderAutoConfiguration对邮件的发送做了进一步简化。接来下就来看看如何在SpringBoot中发送邮件。
发送前的准备注意本篇以QQ邮箱为例,向读者介绍邮件的发送过程。使用QQ邮件发送邮件,首先要申请开通POP3/SMTP服务或者IMAP/SMTP服务。可以看到无论是哪种都需要使用SMTP协议,SMTP全称Simple Mail Transfer Protocol,也就是简单邮件传输协议,它定义了邮件客户端软件与SMTP服务器之间,以及SMTP服务器与SMTP服务器之间的通信规则。举个例子,用户(test@qq.com)先将邮件投递到腾讯的SMTP服务器,这个过程就使用了SMTP协议,然后腾讯的SMTP服务器将邮件投递到网易的S ...
消息服务
本篇来学习消息服务相关的知识,消息服务在一些大型的项目架构中才会使用,但是对于小项目也是可以使用的。
消息队列(Message Queue)是一种进程间或者线程间的异步通信方式,使用消息队列,消息生产者在产生消息后,会将消息保存在消息队列中 ,直到消息消费者来取走它,即消息的发送者和接收者不需要同时与消息队列交互。使用消息队列可以有效实现服务的解耦,并提供系统的可靠性以及扩展性。目前开源的消息队列服务非常多,如Apache ActiveMQ、RabbitMQ等,这些产品也就是常说的消息中间件。
JMSJMS简介JMS(Java Message Service)即Java消息服务,它通过统一Java API层面的标准,使得多个客户端可以通过JMS进行交互,大部分的消息中间件提供商都对JMS提供支持。JMS和ActiveMQ的关系就像是JDBC和JDBC驱动一样的关系。JMS包括两种消息模型:点对点和发布者/订阅者,同时JMS仅仅支持Java平台。
SpringBoot整合JMS由于JMS只是一套标准,因此SpringBoot整合JMS必然是整合JMS的某一个实现,本例子以ActiveMQ ...
整合WebSocket
本篇来学习如何在SpringBoot中整合WebSocket,如果你之前没有使用过WebSocket,那么就有一个疑问,为什么需要使用WebSocket,以及它能做什么事情,这些当你阅读完本篇文章后,都会有一个较为清晰的答案。
为什么需要WebSocket在HTTP协议中,所有的请求都是由客户端发起的,由服务端进行响应,服务端无法向客户端推送消息,但是在一些需要即时通信的应用中,又不可避免的需要服务端向客户端推送消息,传统的解决方案主要有如下几种:
1、轮询。轮询是最简单的一种解决方案,所谓轮询就是客户端在固定的时候间隔下不停地向服务端发送请求,查看服务段是否有最新的数据,若服务端有最新的数据,则返回给客户端;若服务端没有最新数据,则返回一个空的JSON或者XML文档。轮询对于开发人员而言实现起来非常方便,但是弊端也很明显:客户端每次都要新建HTTP请求,服务端要处理大量的无效请求,在高并发场景下会严重拖慢服务端的运行效率,同时服务端的资源被极大的浪费了,因此这种方式在实际开发中并不可取,不到万不得已不会使用这种方式。2、长轮询。长轮询是对传统轮询的升级,开发人员看到传统轮询存在的弊端 ...
安全管理之Shiro
本篇来学习OAuth2和Shiro相关知识以如何在SpringBoot框架中使用它们。
OAuth2OAuth2简介OAuth是一个开放标准,该标准允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如头像、照片、视频等〉,而在这个过程中无须将用户名和密码提供给第三方应用。实现这一功能是通过提供一个令牌(token),而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站在特定的时段内访问特定的资源。这样,OAuth让用户可以授权第三方网站灵活地访问存储在另外一些资源服务器的特定信息,而非所有内容。例如,用户想通过QQ登录知乎,这时知乎就是一个第三方应用,知乎要访问用户的一些基本信息就需要得到用户的授权,如果用户把自己的QQ用户名和密码告诉知乎,那么知乎就能访问用户的所有数据,并且只有用户修改密码才能收回授权,这种授权方式安全隐患很大,如果使用OAuth,就能很好地解决这一问题。
采用令牌的方式可以让用户灵活地对第三方应用授权或者收回权限。OAuth2是OAuth协议的下一版本,但不向下兼容OAuth1.0 。OAuth2关注客户端开发者的简易性,同 ...
安全管理之SpringSecurity
安全对于任何项目来说都是非常重要的,一般而言任何项目都会有较为严格的认证和授权操作,在Java开发领域常见的安全框架有Shiro和Spring Security。Shiro是一个轻量级的安全管理框架,提供了认证、授权、会话管理、密码管理、缓存管理等功能,而Spring Security则是一个更为复杂的安全管理框架,功能比Shiro更强大,权限控制细粒度更高,对于OAuth2的支持也更友好,再加上Spring Security源自Spring全家桶,因此与Spring框架可以做到无缝整合,尤其是SpringBoot中提供的自动化配置方案,可以让Spring Security使用变得更加便捷。本篇学习Spring Security在SpringBoot框架中的使用。
Spring Security基本配置SpringBoot针对Spring Security提供了自动化的配置方案,因为SpringBoot整合Spring Security非常简单,这也是SpringBoot项目中使用Spring Security的优势所在。接下来介绍SpringBoot中如何整合Spring Secur ...
缓存
Spring自3.1开始就提供了对缓存的支持,核心思路是对方法的缓存,当开发者调用一个方法时,将方法的参数和返回值作为key/value缓存起来,当再次调用该方法时,如果缓存中有数据,就直接从缓存中获取,否则直接调用该方法,这种缓存方式是最有效,因为大部分情况下开发者都是在调用方法。不过Spring中并没有提供缓存的具体实现,而是提供了一套缓存的API,这样开发者就可以根据自己需要来选择合适的缓存并实现它即可。目前SpringBoot支持如下8种缓存:Simple、Caffeine、JCache(JSR-107)、Redis、Couchbase、Infinispan、Ehcache 2.x和Hazelcast。目前常用的缓存只是其中的两个:Ehcache 2.x和Redis。其实在Spring中,无论开发者使用哪种缓存实现,不同的只是缓存配置,而开发者使用的缓存注解都是一致,因此Spring中的缓存注解和各种缓存实现之间的关系非常类似于JDBC和各种数据库驱动这两者直接的关系一般。
Ehcache 2.x缓存Ehcache缓存在Java开发领域算的上是比较出名的缓存,而在SpringB ...
开发者工具与单元测试
本篇来学习开发者工具和单元测试相关的知识,对于一个开发者来说了解开发工具和单元测试对于自身水平提高有着非常大的帮助。SpringBoot中提供了一组开发者工具spring-boot-devtools,用于提升开发效率,开发人员可以将该模块包含在任何项目中,而spring-boot-devtools最令人喜欢的地方就是支持热部署,当开发者修改了部分代码或者资源后,SpringBoot项目会自动更新。
devtools使用devtools基本使用当开发者想要在项目中加入devtools模块,只需添加相关依赖即可:
123456<!--引入devtools依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> ...
构建RESTful服务
本篇来学习RESTful相关知识,相信通过本篇的学习,开发者就能在短时间内开发出一套属于自己的RESTful风格的应用。
REST简介 REST(Representational State Transfer )是一种Web软件架构风格,它是一种风格,而不是标准,匹配或兼容这种架构风格的网络服务称为REST服务。REST服务简洁并且有层次,REST通常基于HTTP、URI和XML以及HTML这些现有的广泛流行的协议和标准。在REST中,资源是由URI 来指定的,对资源的增删改查操作可以通过HTTP协议提供的GET、POST、PUT、DELETE等方法实现。使用REST可以更高效地利用缓存来提高响应速度, 同时REST中的通信会话状态由客户端来维护,这可以让不同的服务器处理一系列请求中的不同请求,进而提高服务器的扩展性。在前后端分离项目中,一个设计良好的Web软件架构必然要满足RESTful风格。 在Spring MVC框架中,开发者可以通过@RestController注解开发一个REST服务,不过,Spring Boot对此提供了自动化配置方案,开发者只需要添加相关依赖就能快速构 ...
整合NoSQL---MongoDB及Session共享
本篇继续学习如何整合非关系型数据库(NoSQL),主要是MongoDB的整合,顺便学习如何进行Session的共享。
MongoDB简介MongoDB是一种面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库之间的产品,MongoDB功能丰富,它支持一种类似JSON的BSON数据格式,既可以存储简单的数据格式,也可以存储复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,且支持对数据建立索引。总的来说,MongoDB是一款应用相当广泛的NoSQL数据库。
MongoDB安装目前MongoDB最新版为4.4.1,但是为避免一些问题,此处依然使用4.0.0版本,安装环境选择CentOS7,安装的步骤如下:第一步,下载MongoDB。进入到home目录下执行如下命令下载MongoDB:
1wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.0.tgz
下载完成后,将下载的MongoDB解压,并将解压后的文件夹重命名为mongodb,可执行如下命令:
12tar -zxvf mongodb- ...