本周Spring - 2013年4月30日

工程 | Josh Long | 2013年4月30日 | ...

欢迎来到新一期的本周Spring!像往常一样,本周我们要介绍很多内容,所以让我们开始吧。你错过了上周 Pivotal 的公开发布会吗?观看重播,了解 GE 对新实体的投资!Pivotal 的使命是将消费级软件带入企业——在那里,Spring、Groovy、Grails、RabbitMQ、Redis 和 Cloud Foundry 等开源技术已被广泛采用。查看新的 Pivotal 网站,“社区”链接(右上角)下有一些可能令你惊喜的其他开源倡议!

  1. Oliver Gierke 宣布发布 Spring HATEOAS 0.5,其中包含许多新功能
  2. Spring Security 负责人 Rob Winch 宣布Spring Security 3.1.4 现已发布。这是一个维护版本,包含多项 bug 修复,包括对 Spring 3.2 的 OSGi 支持。
  3. Spring Data 忍者 Oliver Gierke (这个家伙真忙!)发推文介绍了 Spring Data 的路线图:推出了Spring Data "Babbage" 版本
  4. Spring Data Arora SR1 本周发布(以Sanjeev Arora命名)。顺便说一句,你可能已经注意到,Spring Data 各个发布系列的名称都取自计算机科学领域的一些有影响力的人物。新版本以Charles Babbage命名。
  5. Adam Shook 和 Mark Pollack 博士的网络研讨会Hadoop, Pivotal HD 和 Spring for Apache Hadoop现已在线提供。
  6. Azul Systems 的 Gil Tene 在 SpringOne2GX 2012 上做了一个精彩的演讲,题为理解 Java 垃圾回收及其应对之道,现已在线提供。
  7. 新的 SpringOne2GX 高清重播现已在 YouTube 上提供:使用 Spring Integration 和 Spring Batch 构建高性能应用,案例研究:配置多站点内存数据库
  8. James Watters 分享了他发现的一个关于设置 Cloud Foundry 和 BOSH 的视频。这个视频非常棒,如果你想了解 BOSH,值得一看。
  9. 人们写博客文章的主题有时会令我惊讶。Javarevisted 博客有一篇不错的文章,介绍了 Spring 的(虽然相对内部,但很稳定)org.springframework.util.StringUtils 类,并提供了如何将集合转换为带分隔符的字符串的示例。我认为关于这个主题的信息可能有点过多,但我喜欢这种热情!
  10. RabbitMQ 开发者布道师 Alvaro Videla 写了一篇文章,介绍了如何使用 PHPUnit 对 RabbitMQ 进行单元测试。这种方法相当酷,不过我不知道它在 Java 和 jUnit 中同时执行测试套件时效果如何。无论如何,这是对我最喜欢的消息队列进行单元测试的好方法!
  11. 你需要一个 Spring Integration 适配器吗?你有没有查看过Spring Integration 扩展仓库?这个仓库收集了一些比 Spring Integration 核心发展更快的或者正在完善的适配器。它是寻找各种问题解决方案的好地方。甚至连拉取请求都充满了有用的东西——我看到了令人惊叹的Gary Russell贡献的 MQTT 适配器!
  12. 看看 @gopivotal 博客上这篇精彩的文章,题为每分钟 80 万条消息:诺基亚 HERE 如何使用 #RabbitMQ 创建实时交通地图。它介绍了诺基亚 HERE 的架构,该架构构建于 Spring AMQPRabbitMQ 之上。

本周Spring - 2013年4月23日

工程 | Josh Long | 2013年4月23日 | ...

欢迎回到新一期的本周Spring!在旧金山,我们正体验着典型的春季初露生机和美好的天气。这也很合适,因为 Pivotal 开源社区——包括Cloud FoundrySpringSource——正忙得不可开交,我们正迈向4月24日的 Pivotal Initiative 发布会。到时见!

言归正传,让我们进入本周综述

  1. 你们看了 Spring Batch 2.2.0.RC1 中令人惊叹的 Java 配置支持吗?我刚刚链接给你们的代码展示了一个完整可用的 Spring Batch 作业,它可以读取 .csv 文件,然后将记录写入数据源,所有这些都在类中完全用 Java 配置。这展示了 2.2.0 中的 @EnableBatchProcessing 注解。快去看看
  2. 新的 SpringOne2GX 高清重播现已在 YouTube 上提供:使用 Spring 和 vFabric 实现领域驱动设计在 Cloud Foundry 上进行批处理和集成,以及一个额外会话:理解 Java 垃圾回收及其应对之道
  3. FuzzyDB 开源项目发推文称,他们已经发布了新版本的 FuzzyDB,其 Spring Data 绑定与 Spring Data Arora 发布系列对齐。恭喜你们!
  4. 你有机会尝试使用 Thymeleaf,这个对 HTML5 和 Spring MVC 友好的模板引擎吗?如果你想学习更多,你可能会喜欢这个名为Thymeleaf,能否完美融合?的演示文稿。
  5. David Welch 整理了一个 Spring Data Mongo 的快速演示并公开了工作。他发推文称他在 8 分钟内使用 4 个类和一个 pom.xml 就完成了演示。干得好!
  6. SpringSource YouTube 频道 SpringSourceDev 上观看 Ramnivas Laddad 在 SpringOne2GX 上的精彩演讲 CloudFoundry 架构 直播。
  7. Spring HATEOAS 负责人 Oliver Gierke 发推文分享了这篇文章,我如何向妻子解释 REST。这篇文章乍一看像是一个人试图向没有相同技术背景的人解释一个相当深入的技术概念,但很快就变成了一篇(我认为非常有洞察力)关于 REST 适用性的文章。如果你想将你的 REST 功力提升到新的水平,可以看看Spring HATEOAS
  8. 我个人非常喜欢新的 Java 配置 API,包括最近发布的和目前在预览版本中提供的。我在上面展示了一个 Spring Batch API 的非常简单的例子。上周我也花了一些时间撰写了关于强大的 Spring Social Java 配置 API 的文章,该 API 即将在 1.1.0.M2 版本中提供。
  9. 你可以通过使用 @Required 注解来让 Spring 执行一种前置条件检查,从而在运行时要求属性必须是非 null 值,否则 Spring 将中止对象的构建。这有助于避免任何隐式的 NullPointerException。这篇JavaBeat 文章很好地解释了如何使用 @Required
  10. how to do in java 博客有一篇不错的文章,介绍了如何在 Spring Security 3 中创建自定义的 UserDetailsService
  11. JavaCodeGeeks 博客有一篇不错的文章,介绍了如何使用 Spring MVC 创建 RESTful 服务
  12. Brian's Java Blog 有一篇不错的文章,介绍了如何使用 Spring AOP,包括注解和基于 XML 的配置选项

介绍 Spring XD

工程 | Mark Fisher | 2013年4月23日 | ...

今天,我们正式启动一项名为 Spring XD 的新倡议,其主题是“应对大数据复杂性”1

Spring Data 团队在过去几年里一直非常忙碌,不仅为 NoSQL 数据存储提供了支持,还简化了 Hadoop 的开发体验。随着Spring for Apache Hadoop 项目的创建,我们通过提供丰富的配置模型以及 Hive 和 Pig 等 Hadoop 生态系统项目的一致编程模型,使得开始开发 Hadoop 应用变得更加容易。正如 Spring 用户所期望的,你可以

  1. 将 MapReduce 作业配置并作为容器管理的 Bean 运行。
  2. 使用 HDFS、HBase、Pig 和 Hive 的模板辅助类来移除应用程序中的样板代码。

Spring…

本周Spring - 2013年4月16日

工程 | Josh Long | 2013年4月16日 | ...

欢迎来到新一期的本周Spring!本周对 Spring 在 Pivotal 来说是激动人心的一周,你可以在重新安排的 Pivotal 发布会(4月24日)上听到更多相关内容。

  1. 如果你读得太快了,请注意 Pivotal 已将发布会重新安排到 4 月 24 日。在此注册
  2. Arjen Poutsma 宣布发布 Spring Web Services 2.1.3.RELEASE。新版本主要包含错误修复,详细信息请查看更新日志
  3. 不要错过即将举行的由 Donald Miner 和 Mark Pollack 讨论 Pivotal HD 和 Spring Hadoop 的网络研讨会,对于对 Pivotal HD 感兴趣的人来说,这是一个很好的入门研讨会。
  4. 新的 SpringOne2GX 高清重播现已在 YouTube 上提供:Cloud Foundry 架构NewSQL 中的有效设计模式
  5. 前几天 Reddit 上有一篇很棒的文章,它以 Martin Lawrence 为例解释了 REST 和 SOAP 的区别。这与 Spring 无关,但足够有趣,值得分享。
      Spring, of course, has an amazing REST stack and I highly encourage people to check out how to build consolidated, streamlined REST services with Spring! Moving on... :) 
    
  6. James Rossiter 写了一篇不错的文章,介绍了如何使用 Spring 的 InitBinder 来解决 Spring MVC POST 请求到 Controller Actions 中的类型不匹配和绑定异常问题。
  7. @olivergierke 在 Twitter 上提出了一个很好的观点:将 JTA 1.2 JSR 的 javax.transaction.Transactional 注解添加到 Spring 需要多少代码?几乎没有!这里的代码大部分只是单元测试。除此之外,这只是将 JTA 注解简单地映射到 Spring 已经支持的引擎,该引擎目前也支持原生的 Spring @Transactional@javax.ejb.TransactionAttribute 注解。
  8. 你是否正在研究 Gradle 并想快速开始使用 Spring?Giancarlo Frison 写了一篇不错的文章,提供了一个可用于 Spring 应用的引导性 Gradle 构建配置
  9. Eugen Paraschiv 写了一篇不错的文章,介绍了如何使用 RestTemplate 进行 HTTP BASIC 认证
  10. Spring 长期以来一直支持一个名为 org.springframework.util.StopWatch 的工具类,可用于测量方法调用的执行时间。Javarevisited 博客有一篇
      <a href="http://www.stumbleupon.com/su/1rKtfP/javarevisited.blogspot.com.au/2012/04/how-to-measure-elapsed-execution-time.html">nice post on how to use the <CODE>StopWatch</code> class</a>.
    </LI>
    
  11. 这篇文章相当老,但我刚偶然看到它,觉得这是一个构思周到的介绍 Spring 中面向切面编程 (AOP) 的演示文稿

本周Spring - 2013年4月9日

工程 | Josh Long | 2013年4月9日 | ...

欢迎来到新一期的本周Spring!像往常一样,我们有很多内容要介绍,所以让我们开始吧!

  1. SpringSource 首席技术官 Adrian Colyer 概述了 SpringSource 和 Pivotal Initiative 下 Spring 项目的方向和发展势头。Pivotal Initiative 是 EMC 剥离出来的一家新公司,由 SpringSource、Cloud Foundry 和 GreenPlum 等组成。如果你想了解 Spring 在这项新倡议中扮演的 - 咳咳 - 核心 角色,这篇报道绝对值得一读!
    </LI>  
    <LI> Spring Batch lead Michael Minella has <A href="http://www.springsource.org/node/9666"> announced that Spring Batch 2.2.0.RC1 is now available</a>.
    	The new release includes preliminary support for Spring Data, Java configuration support, non-identifying job parameters 
    	and numerous fixes and polishes. This release is amazing, and definitely worth a look. I, personally, <EM>love</EM> the Java configuration API that's
    	been surfaced. You don't need to write another…

Pivotal Initiative 中的 Spring 和开源

工程 | Adrian Colyer | 2013年4月3日 | ...

现在你可能已经听说过 Pivotal 了。我想借此机会解释一下这对 Spring 意味着什么,并告诉你我们 2013 年的一些计划。

如果你错过了,以下是 Pivotal 的基本背景:该倡议由 Paul Maritz 领导,汇聚了 EMC 和 VMware 的关键人员和项目,旨在将“消费级”技术带入企业。我们看到新一代应用正在涌现,它们由新的数据基础提供支持,并将在了解客户身份、位置以及他们当下正在做什么的背景下与客户互动并服务客户……

本周Spring - 2013年4月2日

工程 | Josh Long | 2013年4月2日 | ...

欢迎来到新一期的本周Spring!我刚从Devoxx UKDevoxx France 回来,很高兴在那里与各行各业使用 Spring 的开发者交流。我还在伦敦 Skills Matter 上就使用 Spring 构建 Web 应用发表演讲。感谢 Skills Matter、伦敦 Spring 用户组以及出色的 Rob Harrop 的邀请,非常愉快!如果你感兴趣,那场会话的视频现已在线提供

  1. 今天注册参加 2013 年 9 月 9 日至 12 日在加州圣克拉拉举行的 SpringOne 2GX 2013,享受超早鸟优惠价!
  2. Gary Russell 宣布 Spring AMQP 1.2.0.M1 现已发布
  3. <LI> The Cujojs team has announced that <CODE>rest.js</CODE> is <a href="http://cujojs.com/">now part of Cujo.js</a>
    <a href…

本周Spring - 2013年3月26日

工程 | Josh Long | 2013年3月26日 | ...

欢迎来到新一期的本周Spring!本周我在寒冷的(🥶!)英国伦敦和法国巴黎参加 Devoxx UKDevoxx FR,并且 - 今晚 - 我在 Skills Matter 为伦敦 Spring 用户组做了一个演讲。真是愉快的经历。如果你在法国并想讨论 Spring,请随时联系我

  1. CujoJS 团队宣布 When.js 2.0 现已发布
  2. 我找到了一些不错的介绍 Spring Integration 的文章。这里是第 1 部分第 2 部分
     These posts are very thorough and well worth a read! </LI>
     <LI>New SpringOne2GX replays now available in HD on YouTube: <a href="http://www.springsource.org/node/4302">What's New in Spring Integration 2.2 and Spring Integration, Batch, &amp; Data Lightning Talks</a>.</LI>
     <LI> Did you guys miss SpringOne2GX 2012? Don't fret, Oleg Zhurakousky and Arjen Poutsma's talk introducing <a href="https://#/nquWxe7L3u">how to use Spring with Scala is now available on InfoQ</a>. </LI>
     <LI>Michael Isvy's been hard at work refactoring the code 
    	 of the canonical Spring PetClinic reference…

Spring Petclinic 上线 Github 了!

工程 | Michael Isvy | 2013年3月21日 | ...

我们很高兴宣布 Spring Petclinic 示例应用已进行重构。

源代码现已在 github 上可用。这是新应用的截图:

以下是新架构概览

Spring,Spring,Spring

我们使用了以下 Spring 特性

  • 使用注解的依赖注入
  • 使用 jdbc (JdbcTemplate)、JPA 或 Spring Data JPA 的数据访问集成(repository 层)。你可以通过在 web.xml 或 JUnit 测试中设置相应的 bean profile 来选择使用哪种实现。
  • 使用 @Transactional 的事务(service 层)
  • 使用 @Cacheable 和 ehcache 作为缓存实现的缓存(service 层)
  • 面向切面编程(用于监控每个 Repository 方法被调用的次数)
  • Spring MVC: 使用 Bean Validation (JSR-303) 的表单验证
  • Spring MVC: 使用 ContentNegotiatingViewResolver 的内容协商(html、xml 或 atom)。
  • Spring MVC: 使用 SimpleMappingExceptionResolver 的异常处理
  • Spring MVC: 使用 Spring MVC 测试框架

 

我们充满活力的社区

我们收到了社区中许多专家的贡献(包括几个开源项目的负责人)。

 

Thymeleaf

如果你还没听说过,Thymeleaf 可以被视为 JSP 的替代品。它将自己定义为  XML / XHTML / HTML5 模板引擎。

它基于一些纯 HTML 文件,并带有一点命名空间魔法。

Thymeleaf 项目的 Daniel 和 Soraya 创建了一个使用 Thymeleaf 而非 JSP 的 Spring-Petclinic 分支。他们在这篇博客文章中记录了迁移步骤:http://www.thymeleaf.org/petclinic.html

Spring Petclinic 的 Thymeleaf 分支可在此处获取:https://github.com/thymeleaf/thymeleafexamples-petclinic

要了解更多关于 Thymeleaf 的信息:http://www.thymeleaf.org

在 Twitter 上关注 Thymeleaf:https://twitter.com/thymeleaf

 

Dandelion

Dandelion 提供了一套标签库,你可以与 JSP 或 Thymeleaf 一起使用。

我们在 Spring-Petclinic 中使用了它来处理 DataTables。它基于 jQuery DataTables 和 Bootstrap 生成表格。

你可以这样做


<datatables:table data="${ownerList}" id="dataTable"  theme="bootstrap2" export="pdf">
 <datatables:column title="Name" property="name" sortable="true" />
 <datatables:column title="Address" property="address" sortable="true" />
</datatables:table>

输出的 html 表格看起来像这样

Dandelion 在 Spring Petclinic 的主分支中使用。

Dandelion 项目的 Thibault Duchateau 写了一篇不错的博客文章,描述了 Spring Petclinic 应用的迁移过程

要了解更多关于 Dandelion 的信息:  http://dandelion.github.com/

在 Twitter 上关注他们:https://twitter.com/dandelion_proj

 

Maven 还是 Gradle?

默认情况下,Spring Petclinic 使用 Maven,因为它是 Java 应用最常见的选择。虽然 Spring Petclinic 与大多数实际应用相比相当小巧,但其 Maven pom.xml 文件已经相当冗长了。

Thoughtworks 中国的 Li Yanhui 很好地将 Spring Petclinic 迁移到了 Gradle。这是一个很好地比较 Maven 和 Gradle 的方式。build.gradle 配置文件确实更容易理解。它目前包含 143 行(而 Maven POM 为 543 行)。

你可以在这里浏览基于 Gradle 的 Spring Petclinic 版本:https://github.com/whimet/spring-petclinic 感谢他们,我们得以发现 Spring Petclinic 中一些存在代码重复和缺乏自动化测试的地方。

 

性能测试:让我们扩展!

是否有可能将现有的 Spring Petclinic 在单个服务器实例上扩展到每秒处理 1000 个请求?Ippon Technologies 的 Julien Dubois 就此主题撰写了一系列精彩的五篇博客文章。

它回答了诸如:- 我应该依赖会话上下文吗?(第 2 部分) - 我应该使用哪个 Apache Tomcat 连接器?(第 2 部分) - 我应该使用哪个数据库连接池?(第 3 部分) - JDBC 是否比 JPA 或 Spring Data JPA 更快?( 第 4 部分) - 使用 OpenSessionInViewFilter 的优点是什么?( 第 4 部分) 等问题。

 

参考资料

GitHub 上的 Spring Petclinic Cloud Foundry 上的 Spring Petclinic Petclinic + Thymeleaf Petclinic + Gradle

 

Spring Data GemFire 1.3.0 发布

工程 | David Turanski | 2013年3月14日 | ...

我很高兴宣布 Spring Data GemFire 1.3.0 的正式发布 (GA)。除了许多细微的错误修复和增强之外,此版本还包含一些值得注意的新功能,让使用 GemFire 编写 Java 应用更加轻松

函数注解支持

GemFire 提供通过远程函数执行框架将“代码带到数据”的能力。秉承 Spring 的核心价值观,Spring Data GemFire 隐藏了注册和执行远程函数所需的样板代码,让你能够编写 POJO 并专注于应用逻辑。详细信息请参阅 Spring Data GemFire 参考指南中的函数执行注解支持章节。

简化连接到 GemFire 数据源

GemFire 暴露了许多用于调整连接池性能以及配置本地数据如何管理和同步的选项。Spring Data GemFire 命名空间支持所有这些选项,然而许多应用是客户端,只需要对 GemFire 数据网格进行读写访问。对于这类应用,现在可以直接连接到 GemFire 作为客户端,无需显式配置连接池或客户端区域

 <gfe-data:datasource>
        <gfe-data:locator host="${host}" port="${port}"/>
 </gfe-data:datasource>

上述配置将创建客户端缓存、连接池,并为服务器上所有可用区域创建代理客户端区域,使用合理的默认值,并将它们注册为 Spring bean。

JSON 支持

GemFire 7.0 提供了存储 JSON 并支持完整查询的功能。通常这需要应用使用 JSONFormatter 将 GemFire 的内部格式转换为 JSON 字符串,反之亦然。Spring Data GemFire 现在提供了一个选项,可以自动为选定的区域执行此转换,并提供使用 Jackson 的 ObjectMapper 将 Object 单向转换为 JSON 的功能。此特性使用 Spring AOP 拦截对 Region 和 GemFireTemplate 的适当操作。详细信息请参阅Spring Data GemFire 参考指南

获取 Spring 电子报

订阅 Spring 电子报,保持联系

订阅