整合单机版FastDFS
FastDFSFastDFS简介FastDFS是一个开源的高性能分布式文件系统(Distributed File System)。 它的主要功能包括文件存储、文件同步、文件访问,以及高容量和负载平衡。主要解决了海量数据的存储问题,非常适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS支持Linux、FreeBSD等UNIX系统,很类似于Google FS(GFS),但不是通用的文件系统,只能通过专有的API进行访问,目前提供了C、Java和PHP等语言的API。FastDFS不仅可以解决大容量文件的存储问题,还对追求高性能和高扩展性的互联网行业提供了一种可行的解决方案。
FastDFS架构下面是一张来自FastDFS官网的系统架构图:
从图中可以知道FastDFS架构包括Tracker Server和Storage Server两部分,其中Tracker Server是跟踪服务器,用来追踪文件,可以理解为文件的一个索引,而 Storage Server是存储服务器,用来保存文件。
开发者上传文件的文件最终保存在Sto ...
项目构建与部署
其实按照正常的学习顺序,项目的构建与部署应当安排在第一章,但是放在后面则说明本套学习笔记差不多应该结束了,一个项目到了不部署的阶段。
JAR项目打包本篇就不再新建SpringBoot项目了,而是使用第一个hellospringboot项目作为例子进行介绍。使用spring-boot-maven-plugin插件可以创建一个可执行的JAR应用程序,前提是应用程序的parent为spring-boot-starter-parent。在pom.xml文件中新增打包插件的build:
1234<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId></plugin>
配置完成后,在当前项目的根目录(与pom.xml文件同级目录)下执行如下的Maven命令进行打包操作:
1mvn package
如果你使用的开发工具为I ...
应用监控
当一个SpringBoot项目在运行时,开发者需要对SpringBoot项目进行实时监控,获取项目的运行情况,在项目出错时能够实现自动报警等。SpringBoot提供了actuator(读作[ˈæktjuˌeɪtər])来帮助开发者获取应用程序的实时运行数据。开发者可以选择使用HTTP端点或JMX来管理和监控应用程序,获取应用程序的运行数据,包括健康状况、应用信息、内存使用情况等。
端点配置开启端点在SpringBoot中开启应用监控非常容易,只需要添加actuator依赖即可,actuator(执行器)是制造业术语,指一个用于移动或控制机械装置的工具,一个很小的变化就能让执行器产生大量的运动。
第一步,创建项目。使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为actuatorspringboot,然后在pom.xml文件中添加如下依赖:
123456789<!--添加actuator依赖--><dependency> <groupId>org.springframework.boot</gr ...
企业开发常用功能(下)
本篇继续学习在企业开发过程中经常会使用到的一些功能,主要是批处理、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 ...