spring Boot依赖项目解析(一)

spring Boot依赖项目解析(一)


小五游侠 2016-12-09 13:57:48

spring Boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

多年以来,Spring IO平台饱受非议的一点就是大量的XML配置以及复杂的依赖管理。在去年的SpringOne 2GX会议上,Pivotal的CTO Adrian Colyer回应了这些批评,并且特别提到该平台将来的目标之一就是实现免XML配置的开发体验。Boot所实现的功能超出了这个任务的描述,开发人员不仅不再需要编写XML,而且在一些场景中甚至不需要编写繁琐的import语句。在对外公开的beta版本刚刚发布之时,Boot描述了如何使用该框架在140个字符内实现可运行的web应用,从而获得了极大的关注度,该样例发表在tweet上。

http://www.infoq.com/cn/articles/microframeworks1-spring-boot

各类依赖项目简介

spring Security

Spring Security提供了基于Java EE的企业应用软件全面的安全服务。这里特别强调支持使用Spring框架构建的项目,Spring框架是企业软件开发Java EE方案的领导者 . 如果你还没有使用Spring来开发企业应用程序,我们热忱的鼓励你仔细的看一看。熟悉Spring特别是依赖注入原理将帮助你更快更方便的使用Spring Secirity.

https://vincentmi.gitbooks.io/spring-security-reference-zh/content/1_introduction.html

spring AOP

AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。

文/dolphin叔叔(简书作者)
原文链接:http://www.jianshu.com/p/fe8d1e8bd63e
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

spring Cache

Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如EHCache 或者 OSCache),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。

Spring 的缓存技术还具备相当的灵活性,不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存临时存储方案,也支持和主流的专业缓存例如 EHCache 集成。

http://www.cnblogs.com/rollenholt/p/4202631.html

spring DevTools

Spring Boot 1.3中引入了一个新的模块,devtools。

顾名思义,这个模块是为开发者构建的,目的在于加快开发速度。

这个模块包含在最新释出的1.3.M1中。

http://ju.outofmemory.cn/entry/241222

spring Configuration Processor

通过使用spring-boot-configuration-processor jar, 你可以从被@ConfigurationProperties注解的节点轻松的产生自己的配置元数据文件。该jar包含一个在你的项目编译时会被调用的Java注解处理器。

https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/X.%20Appendices/B.2.2.%20Adding%20additional%20meta-data.html

spring Validation

Spring框架中有一个非常重要的包,org.springframework.validation,它提供了两个重要的特性:数据绑定和校验。

数据绑定允许用户的输入动态的绑定到应用的领域模型,实现字符串类型和其他类型的转换。

http://benweizhu.github.io/blog/2014/07/19/spring-validation-by-example/

spring Session

Spring Session为企业级Java应用的session管理带来了革新,使得以下的功能更加容易实现:

  • 编写可水平扩展的原生云应用。
  • 将session所保存的状态卸载到特定的外部session存储中,如Redis或Apache Geode中,它们能够以独立于应用服务器的方式提供高质量的集群。
  • 当用户使用WebSocket发送请求的时候,能够保持HttpSession处于活跃状态。
  • 在非Web请求的处理代码中,能够访问session数据,比如在JMS消息的处理代码中。
  • 支持每个浏览器上使用多个session,从而能够很容易地构建更加丰富的终端用户体验。
  • 控制session id如何在客户端和服务器之间进行交换,这样的话就能很容易地编写Restful API,因为它可以从HTTP 头信息中获取session id,而不必再依赖于cookie。

http://www.infoq.com/cn/articles/Next-Generation-Session-Management-with-Spring-Session

http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession-redis-jc

spring Retry

为了使处理更加健壮,减少异常的发生,重试一个失败的操作有时是必要的,因为有可能在后续的失败重试中处理成功了。因此对于程序异常或者错误更应该使用这种重试机制进行处理。例如在远程调用web服务或者RMI服务时,因网络故障或者数据库更新时发生 DeadLockLoserException 导致请求失败,但在稍等片刻后这种异常会自动恢复。

http://iyiguo.net/blog/2016/01/17/spring-retry-simple-introduce/

http://www.cnblogs.com/rollenholt/p/4711441.html

https://github.com/spring-projects/spring-retry

spring Lombok

lombok作用:消除模板代码。

  • getter、setter、构造器、toString()、equals()
  • 便捷的生成比较复杂的代码,例如一个POJO要转化成构建器模式的形式,只需要一个注解。

注意:使用之前,做以下几步让eclipse支持该注解。

http://www.cnblogs.com/java-zhao/p/5465652.html

http://blog.csdn.net/czplplp_900725/article/details/26380335

http://blog.csdn.net/hinstenyhisoka/article/details/50468271

spring Websocket

Spring从4.0开始加入了spring-websocket这个模块,并能够全面支持WebSocket,它与Java WebSocket API标准(JSR-356)保持一致,同时提供了额外的服务。

http://www.jianshu.com/p/51dbbc637197

spring Webservice

使用maven来管理java项目

这个技能必须点一级,以便快速配置项目。

本文实际上是我学习Spring的过程中搬的官网上的demo,使用maven配置项目。

② jdk 1.8+ 该服务demo需要在jdk1.8+的环境下运行

http://www.cnblogs.com/tzyy/p/4837701.html

http://www.cnblogs.com/qunyang/p/3328561.html (jersay)

Ratpack

随着微服务架构(microservice)的流行,很多应用被拆分成若干个独立的小应用,并使用 HTTP 协议作为服务直接的通讯协议。每个微服务只完成一个相对独立的功能。对于这些 HTTP 微服务来说,传统的 Servlet 容器过于复杂和厚重,运行所需的内存消耗过高。Ratpack 是一个用来开发高效 HTTP 微服务的 Java 库,它基于 Netty,并采用异步非阻塞和事件驱动的方式来提高系统的性能。

https://www.ibm.com/developerworks/cn/java/j-lo-ratpack-http-microservice/

在微服务天堂中Ratpack和Spring Boot是天造地设的一对。它们都是以开发者为中心的运行于JVM之上的web框架,侧重于生产率、效率以及轻量级部署。他们在服务程序的开发中带来了各自的好处。Ratpack通过一个高吞吐量、非阻塞式的web层提供了一个反应式编程模型,而且对应用程序结构的定义和HTTP请求过程提供了一个便利的处理程序链;Spring Boot集成了整个Spring生态系统,为应用程序提供了一种简单的方式来配置和启用组件。Ratpack和Spring Boot是构建原生支持计算云的基于数据驱动的微服务的不二选择。

http://www.infoq.com/cn/articles/Ratpack-and-Spring-Boot

Vaadin

借助 Vaadin,您无需掌握 HTML5、CSS 和 JavaScript 就可以创建引人注目的用户体验。当您在最喜欢的 IDE 中用 100 % 的 Java 进行编程时,该框架会为您部署这些技术。

http://www.ibm.com/developerworks/cn/java/j-full-stack-java-web-dev-vaadin/

http://demo.vaadin.com/sampler/#ui/data-input/other/check-box

https://vaadin.com/wiki/-/wiki/Spring+Vaadin/I+-+Getting+Started+with+Vaadin+Spring+and+Spring+Boot

spring Data Rest Service

Spring Boot可以通过spring-boot-starter-data-rest来对外提供REST API,可以免于编写对应的Controller,且具备分页和排序的功能。

http://www.jianshu.com/p/3ea7170a1099

http://spring.io/guides/gs/accessing-data-rest/

spring HATEOAS

REST 架构风格对于大多数开发人员来说都不陌生。在 REST 架构中除了资源和 HTTP 方法之外,超媒体控制也是重要的一环。HATEOAS (Hypermedia as the Engine of Application State) 是 REST 架构风格上的一种限制。基于 HATEOAS 的 REST 服务可以允许服务端和客户端在最大程度上的解耦。客户端和服务端并不需要严格的接口规范。客户端可以通过服务端提供的超媒体表示来动态与服务端进行交互。Spring HATEOAS 与 Spring 框架中已有的 Web 服务功能很好的整合在一起,可以创建满足 HATEOAS 要求的 REST 服务。在开发 REST 服务时,推荐使用 Spring HATEOAS

https://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/

http://spring.io/guides/gs/rest-hateoas/

spring rest repositories hal browser

http://docs.spring.io/spring-data/rest/docs/current/reference/html/

spring Mobile
  • 客户端设备识别:识别结果只有3种类型:NORMAL(非手机设备)、MOBILE(手机设备)、TABLET(平板电脑)。在系统里可以通过以下代码获取设备识别结果:
    Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest);
  • 网站偏好设置:Spring 通过设备识别的结果来设置当前网站是NORMAL还是MOBILE。
    最后 Spring Mobile会将信息同时放入cookie和request attribute里面。
  • 网站自动切换:可根据不同的访问设备切换到对应的页面

http://blog.csdn.net/wuyt2008/article/details/18842515

spring REST Docs

Spring REST Docs helps you to document RESTful services. It combines hand-written documentation written with Asciidoctor and auto-generated snippets produced with Spring MVC Test. This approach frees you from the limitations imposed by tools like Swagger. It helps you to produce documentation that is accurate, concise, and well-structured. This documentation then allows your users to get the information they need with a minimum of fuss.

https://projects.spring.io/spring-restdocs/

Thymeleaf

Thymeleaf是一个开源的Java模板引擎库。

它的核心目标是提供一种优雅的,结构良好的的方式去创建我们所需要的模板。

为了实现这个目标Thymeleaf全部基于XML标签和属性去定义模板的处理逻辑,而不是想其他模板引擎一样在模板中编写逻辑代码。

所以Thymeleaf项目与其他模板引擎的最大优势,其模板文件本身也是一个格式良好的HTML文件,并且可以直接被浏览器打开。改变了在传统模板引擎下前端设计人员和后端开发人员的协作方式,能有效的提高工作效率。

http://yunlzheng.github.io/2015/03/17/template-engine-thymeleaf/

http://www.blogjava.net/bjwulin/archive/2013/02/07/395234.html

JOOQ

JOOQ,全称Java Object Oriented Querying,即面向Java对象查询。它是Data Geekery公司研发的DA方案(Data Access Layer),主要解决两个问题:

  1. Hibernate的抽象使得我们离SQL太远,对SQL的掌控力度弱
  2. JDBC又过于嘈杂,需要干的事情太多

https://amao12580.github.io/post/2016/04/JOOQ-from-entry-to-improve/

Flyway

Flyway 是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。

Flyway 的项目主页是 http://flywaydb.org/ )(最近才迁移到这个主页,之前一直在googlecode 下管理http://code.google.com/p/flyway/ ),在项目的主页上可以看到Flyway 与几款主流数据库版本管理工具的特性对比列表。

http://casheen.iteye.com/blog/1749916

GemFire

如果你了解Redis或memCached,那么恭喜,你很快就能理解GemFire是什么,没错,你可以把它理解为一个增强版的Redis,具体在哪些方面增强,我们日后慢慢聊。如果你不了解Redis,也没有关系,先看官方网站上的说法:Pivotal GemFire is the distributed, in-memory database for developers who are building the highest scaling and performing data-centric apps in the world. 但是,按照我对它的理解,我更愿意用下面的语言来描述它,GemFire是一个高性能的分布式内存对象缓存系统,如果非要说它是数据库,那也只能算是一个Key/Value数据库(我更愿意称之为Key/Value存储系统)

http://www.cnblogs.com/doubletree/p/4198970.html

https://spring.io/guides/gs/accessing-data-gemfire/

spring Cloud

spring cloud config

笔者的微服务项目中需要使用一个统一的管理分布式系统的配置中心,之前试用过Disconf。实际使用发现,Disconf可以很好地满足项目的需求,同时提供了一个友好的图形化界面供操作。但是,其服务器端使用了Nginx, Tomcat, MySQL, Zookeeper和Nginx,安装部署起来比较复杂;客户端也引入了不少的Jar包,可能引起版本冲突。因此,笔者也在留意是否有其它的可选方案。最近接触到Spring Cloud Config,认为也是一个搭建配置中心不错的选择,在此和大家分享一下试用的经验,供大家参考。
文章中的样例代码可以在https://git.oschina.net/gongxusheng/spring-config-demo下载。

http://blog.csdn.net/gongxsh00/article/details/51292200

Eureka:实际上在整个过程中维护者每个服务的生命周期。每一个服务都要被注册到Eureka服务器上,这里被注册到Eureka的服务又称为Client。Eureka通过心跳来确定服务是否正常。Eureka只做请求转发。同时Eureka是支持集群的呦!!!
Zuul:类似于网关,反向代理。为外部请求提供统一入口。
Ribbon/Feign:可以理解为调用服务的客户端。
Hystrix:断路器,服务调用通常是深层的,一个底层服务通常为多个上层服务提供服务,那么如果底层服务失败则会造成大面积失败,Hystrix就是就调用失败后触发定义好的处理方法,从而更友好的解决出错。也是微服务的容错机制。

Hystrix

1:Hystrix使用命令模式HystrixCommand(Command)包装依赖调用逻辑,每个命令在单独线程中/信号授权下执行。

2:可配置依赖调用超时时间,超时时间一般设为比99.5%平均时间略高即可.当调用超时时,直接返回或执行fallback逻辑。

3:为每个依赖提供一个小的线程池(或信号),如果线程池已满调用将被立即拒绝,默认不采用排队.加速失败判定时间。

4:依赖调用结果分:成功,失败(抛出异常),超时,线程拒绝,短路。 请求失败(异常,拒绝,超时,短路)时执行fallback(降级)逻辑。

5:提供熔断器组件,可以自动运行或手动调用,停止当前依赖一段时间(10秒),熔断器默认错误率阈值为50%,超过将自动运行。

6:提供近实时依赖的统计和监控

http://hot66hot.iteye.com/blog/2155036

Zipkin

http://www.cnblogs.com/zhengyun_ustc/p/55solution2.html

cloud AWS

https://github.com/spring-cloud/spring-cloud-aws

坚持原创技术分享,您的支持将鼓励我继续创作!