文章: SpringOne大会采访:Mark Pollack博士专访
SpringOne大会今年首次落户中国,将会于12月7-8号在北京召开,大会结合了Spring和Cloud Foundry大热门技术,将会针对于Spring的最新发展、Spring在移动、大数据领域的应用等做主题分享。InfoQ就Spring以及Spring Data、Spring Batch等话题采访到了Spring社区专家Mark Pollack博士。
相关厂商内容
《JavaScript语言精粹》作者Douglas Crockford确认参会
GitHub研发团队成员Corey Donoho QCon分享Github架构设计与团队合作
Google商用Apps创始人Derek Parham确认参加QCon北京2013
相关赞助商
QCon北京2013,Node专场:NodeJS如何在大企业应用落地发挥成效, 详情请点击!
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:谢谢。