SpringOne 大会今年首次落户中国,将会于 12 月 7-8 号在北京召开,大会结合了 Spring 和 Cloud Foundry 大热门技术,将会针对于 Spring 的最新发展、Spring 在移动、大数据领域的应用等做主题分享。InfoQ 就 Spring 以及 Spring Data、Spring Batch 等话题采访到了 Spring 社区专家 Mark Pollack 博士。
InfoQ:欢迎来到北京,我是 InfoQ 中文站的编辑丁雪丰,感谢您接受我们的采访。您能否先为我们的读者做个自我介绍?
Mark:我就职于 SpringSource,它是 VMWare 的子公司,多年以来都在从事 Spring 开源项目相关的工作,早在成立公司支持它以前就是团队的成员了。我做过 JmsTemplate 相关的事情,早期还做过 Spring.NET 项目——这是.NET 版本的 Spring 框架。这些年数据访问技术方面发生了很多变化,大约三年前,我开始围绕 NoSQL、大数据这些方面为大家提供支持,还为关系型数据库添加了更多支持。
InfoQ:您刚提到了 NoSQL 技术,现在有很多数据存储,比如 RDBMS、NoSQL 和 NewSQL。在只有 RDBMS 时,Hibernate 可以应对大部分的问题。现在我们要面对 MongoDB、Redis 还有 Cassandra,Spring 如何让开发者的生活变得更轻松一点呢?
Mark:我们的确为其中一些提供了支持,但不是全部 NoSQL 数据库都有支持,MongoDB 和 Redis 就有支持,Cassandra 目前还不在其列。Spring 从很多方面减轻了开发者的负担。首先,使用 Spring 容器来配置应用程序,通过一致的方式来使用多种技术,在 Spring 早期,你要把 MVC、模版引擎和 Hibernate 结合在一起,就得益于一致的使用方式;NoSQL 数据库和关系型数据库很类似,我们可以用一个通用的配置模型将所有技术整合起来,这只是纯粹的配置方面的。
其次,我们为很多 NoSQL 数据库,还有 Hadoop 提供了很多特定的辅助类,和 JdbcTemplate 很类似,我们提供了 MongoTemplate,能更方便地使用 MongoDB,如果你只是使用标准 API 集合,它同样提供了高层 API,比如把 POJO 映射成文档数据模型,这是基本的值属性方面的。
第三,要创建一个针对 POJO 的数据访问类库,以 MongoTemplate 和 RedisTemplate 为例,能很方便地通过 MongoTempalte 来使用一些特性,比如 MapReduce、累加计数器,后者在 Redis 里也很常用,这都很容易。如果你还想映射 POJO 来做领域层,也就是 Repository 层,我们也提供了一些基础设施,帮你对各种 NoSQL 数据库进行 POJO 的增、删、改、查操作。
InfoQ:在您的演讲中,您提到了 Spring Data、Spring Integration,以及一些 Spring 的子项目,这些项目满足了开发者在大数据时代下的各种日常工作需要。您能否向国内的开发者介绍下 Spring Data 项目,虽然国内 Spring 的应用很广泛,但 Spring Data 还未广为人知。
Mark:我很早就开始参与 Spring Data 项目了,我们的目标是提供熟悉的基于 Spring 的编程模型,涵盖大数据、NoSQL 和关系型数据库。如此一来,需要对 NoSQL 数据源做一个抽象,因此我们有两类支持,一个是一系列的模版类,让你更方便地与下层的 NoSQL 存储进行交互;另一个是 Repository 抽象,让你更方便地编写数据访问层,把 POJO 写到数据存储里。
另一大块内容是大数据,我们有 Spring Hadoop 项目,协助进行与 Hadoop 的交互,在 HDFS 里读写文件。Hadoop 中经常用到 Hadoop 任务,你有一系列顺序执行的任务,Spring Batch 能帮你组织这些任务。
InfoQ:这些项目在国外的使用情况是怎么样的,比如美国和英国,在那里大家都用这些 Spring 子项目么?
Mark:我们一直在持续追踪 Maven 上的下载统计信息,这些项目的下载量都是呈指数级增长的。我最近没有关注,但我认为,Spring Integration 和 Spring Batch 的流行程度比较接近。Spring Data JPA 是最流行的项目,虽然 NoSQL 的讨论很热烈,但企业开发者还是在使用关系型数据库,所以对这个结果我们并未感到太吃惊。我们的 MongoDB 支持、Redis 支持最近也越来越流行了,还有 Neo4j,它们的成长曲线很漂亮,终会和 Spring Integration 和 Spring Batch 一样流行的。
InfoQ:在你看来,Java EE 6 和 Spring 框架是个什么关系?有些人认为 Java EE 6 比 Spring 要好,你是怎么想的?
Mark:Java EE 6 就是一堆 JSR 的集合,它的版本基本就是标明用了哪个版本的 JSR 实现。Spring 通常都会部署在 Java EE 容器里,提供一些容器里没有的功能,举例来说,可以让 Spring 在老的不支持 CDI 的容器里提供依赖注入,很多人都看到了其中的价值。Spring 和 Java EE 6 有很多共同点,比如都实现了 Bean Validation、依赖注入注解等等,的确有很多重复的地方。Spring 最出名的是它的依赖注入,CDI 是 Java EE 6 里的依赖注入规范。我认为依赖注入现在已经是个标配了,我想人们不会从一大堆特性里把它挑出来说事。Spring 给你带来的是更多的灵活性,你可以在 Tomcat 3 里用依赖注入,然后升到 Tomcat 7,不会受限于 Java EE 的版本,不受限于 JSR。
InfoQ:Java 7 已经被广泛使用了,明年 Java 8 很快就要来了,Spring 是否已经为新的 JDK 做好准备了?
Mark:Java 8 很令人振奋,我们对一系列的特性都很感兴趣,比如闭包。我们的目标是成为第一个支持 Java 8 的现代 Java 框架,因此我们非常期待 Java 8 的到来。
InfoQ:我们应该如何使用开源软件来构建基于 Hadoop 的大数据平台,让整个解决方案更加易于维护?
Mark:在 Spring Hadoop 是个很好的项目,其中你能找到很多东西帮助创建 Hadoop 项目。如何用它来创建一个更可靠的解决方案,人们使用 Hadoop 的传统方式是用 MapReduce 任务来和 HDFS 交互,用 Pig 或者 Hive 这种构建于 MapReduce 核心之上的语言,所有这些操作基本都是通过命令行、Shell、命令行应用的方式,很多都是在 JavaScript、Perl 和 Ruby 脚本里,一个接一个的进行调用,这种方式很乏味,严重依赖于脚本,在用的时候要十分小心。
在 Spring Hadoop 里,我们有个使用 Hadoop 的编程模型,易于使用,和现有的配置 Spring 的方式保持一致,提供了很多辅助 API 和工具类,让你从脚本驱动的编写 Hadoop 应用的方式转变到一种使用 Java 类的方式,你有了一套早已习惯的结构,只需配置到 Hadoop 的连接,然后执行 Hadoop 任务。比如,你现在可以把那个任务注入到你的代码里并运行。这种方式比意大利面条式的脚本更具可维护性。可以先从一个简单的任务和 Spring 应用上下文开始,以后要是有了很多步骤,比方说 20 个步骤,这时可以在 Spring Batch 任务里复用那些 Hadoop 任务的定义,也就是说 Spring Batch 里的任务就是 Hadoop 任务的引用。也许这么多“任务”有点混淆,但通过这种方式应用程序能更加可靠,可维护性更强。
InfoQ:非常感谢您接受我们的采访。
Mark:谢谢。
评论