您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 应用SpringBoot改变web应用开发模式
2017年23期科技创新与应用TechnologyInnovationandApplication研究与展望应用SpringBoot改变web应用开发模式张峰(哈尔滨学院,黑龙江哈尔滨150086)摘要:SpringBoot给Spring项目以及web开发带来了非常大的影响和改变,文章通过对SpringBoot项目介绍分析了其各个应用方面,得出了SpringBoot对web开发影响重大的结论。关键词:SpringBoot;JavaEE;web开发;Docker中图分类号:TP311文献标志码:A文章编号院2095-2945(2017)23-0193-021概述近年来Spring项目的流行使开发者放弃笨重的JavaEE体系,开源社区发展壮大。SpringBoot的出现又使Spring变得易于开发和维护。本文介绍了SpringBoot和分析其与JavaEE开发体系的不同。分析以SpringBoot为核心的开发框架组成。最后分析部署、测试、监控和管理生产环境等问题。2SpringBoot技术介绍SpringBoot是由Pivotal团队开发的全新的开源开发框架[1],从诞生初期它就着有明确的目的,简化应用Spring开发项目。最突出的特点是配置方式,大大简化了Spring应用各个方面的配置。另外SpringBoot能够集成大量的框架,解决了之前很重要的项目之间包的版本依赖和稳定性问题。同时有了SpringBoot使springcloud众多的组件项目得以良好地被应用,从而改变了web应用的开发模式。SpringBoot技术的特点有以下几点[2]:可以类似点菜一样地选配、组装、生成一个独立的开发初始项目;在内部内置了Tomcat服务器和Jetty服务器,直接把项目打成jar包,这应该是为Docker特意设计的;使用叫做starterPOMs的配置方式使Maven配置大幅度简化;SpringBoot还为大中型项目提供了经常用到的非业务功能型的特点。比如:健康状态检测,外部配置、指标、安全等;在项目中不再推荐使用xml的方式。3SpringBoot与传统JavaEE项目开发模式比较Javaweb应用开发从最早的Servlet技术开始已经经历了很多变化,在这段历史中产生了独立的一整套的生态系统和大量的开源项目。EJB2.0改变了很多,但也还是保留了权威、官方和学术化的整体风格。在这个时候Spring等大批轻量级框架开始产生,发展到今天已经和JavaEE的开发模式形成有明显区别的一派^■真正让我们看到开源社区改变JavaEE的应该是JAP,它的标准明显倾向于Hibernate。Java被Oracle收购后对JavaEE不断发展但开发模式没有很大的发展。SpringBoot是在Spring的大框架下,离不开两项关键技术依赖注入和面向方面编程AOP。在JDK5引入的Annotation出现后Spring大量采用这种配置方式,但之前都是采用配置xml文件的形式。xml文件在webservice流行的时期被推崇的很高。开发人员渐渐发现xml文件越来越多,书写困难(可以对比YAML文件的书写),调试困难等等。所以Spring当初被人的批评很多都是因为xml配置过多。而SpringBoot的改变不是仅仅采用了更好的配置文件格式那么简单。SpringBoot是采用了最初在Maven中看到的“约定大于配置”(Conventionoverconfiguration)的思想,也叫惯例优先原则。简单地解释就是绝大多数配置信息按约定采用缺省配制,用户需要的个性配置采用properties文件或yaml文件的格式写在统一的文件中。其他在开发中的配置信息要么采用Annotation要么采用配置类形式。也就是说SpringBoot可以达到免xml文件配置。这点区别于传统项目开发的特点也是给开发效能提升带来巨大效果的。SpringBoot的项目开发以上的改变如果还不算很大,SpringBoot是如何打包部署的:@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}这段代码虽然简单但反映出几个关键问题。SpringBoot的运行方式是main方法。另外这个项目是Javaweb项目,它必然需要web容器,但这不是war包形式部署。实际上SpringBoot改变了传统开发模式,将其开发的javaweb项目内部内嵌了一个Tomcat,而关键是最终的打包形式是一个包含了所有项目文件和内嵌web容器的jar包。这个jar包的打包形式为将来部署到Docker上提供了良好的条件,这个后面还会提到。SpringBoot使Javaweb项目开发变得轻松很多,当然它的贡献也不止以上这些,当项目真正采用它来开发一般不会再退回原来的开发方式了。4SpringBoot应用系统开发模板架构设计从前台到后台的顺序进行分析。从页面来看,现在的主流已经淘汰了jsp技术。前台常使用模板引擎,主要有FreeMarker,它是一个用Java语言编写的模板引擎,基于模板来生成文本输出。还有Thymeleaf,它和FreeMarker的原理类似,可以达到页面图形设计和应用逻辑的分离。但SpringBoot推荐使用Thymeleaf,原因首先是它可以和SpringMVC很好结合,其次和其他模板引擎相比它的模板可以直接用浏览器正确显示,这也称为自然的模板技术。但其使用的DOM解析所以不适合处理大XML文件。在前端开发还常用到BootStrap、AngularJS、JQuery等。接下来在浏览器数据传输上米用Json的格式RESTful传输。在数据到达服务器后接受请求的是SpringMVC框架,这个框架已经取代Struts2成为控制层绝对的主流了。到持久层框架现在的主流技术有Hibernate、My-batis、JPA,各有优缺点不再赘述。SpringBoot推荐使用SpringData+JPA的方式,当然引擎常用Hibernate,数据库使用MySQL。开发工具推荐用IntelliJIDEA。5SpringBoot部署和测试带来的变革SpringBoot项目能够很好地部署于Docker类的虚拟容器中。Docker是2013年DotCloud公司发起,开源后快速发展。已作者简介:张峰(1975,06-),男,工程师,软件工程硕士,目前主要从事的工作是哈尔滨学院工学院教师,研究方向是软件架构设计方面。-193-研究与展望科技创新与应用TechnologyInnovationandApplication2017年23期经形成以Docker为中心的生态体系。Docker加入了Linux基金会,遵循Apache2.0协议。Docker的受欢迎程度很高,应用该项技术的大型互联网公司几乎占据主流市场的三分之一以上。SpringBoot也针对Docker技术做了很多设计和优化以适应容器技术。Docker引擎的基础组件是Linuxcontainers(LXC)。各种工具的丰富使Docker应用迅速普及,正如SolomonHykes所说:Docker在正确的地点、正确的时间顺应了正确的趋势——即高效地构建应用。隔离是Docker的重点,正如JavaVM隔离了硬件资源环境影响一样,Docker将容器外环境的改变变得不那么重要了,程序的移植变得象拷贝文件一样简单了。这给运维带来了极大的方便。利用SpringBootMavenplugin将Maven引入SpringBoot项目是一个关键,Spotify的docker-maven-plugin插件可以用来构建Maven的Docker镜像。可以编写Dockerfile来指定特定的镜像层。之后可以将镜像推送到DockerHub上,DockerHub是一个类似GitHub原理的镜像托管平台。在项目开发阶段最好的做法是使用持续集成的做法,即使用Jenkins来结合GitHooks,当代码Push到Git服务器后,Jenkins自动去执行shell脚本文件Pull的代码,又Maven变异打包生成最新的镜像文件。最后再push到DockerHub上。装有Docker的服务器从DockerHub上的到镜像运行该镜像的所属容器从而完成整个部署过程。另外由于在SpringBoot中的模板引擎默认开启缓存,利用SpringLoaded实现类文件修改热部署,利用JRebel可以实现开发热部署,这样会极大提高开发调测效率。SpringBoot在测试方面也带了很多的改变[3]。首先,在SpringBoot项目中按照其一惯的starter做法在项目中加入spring-boot-starter-test的依赖,其他的关于测试的依赖就不用再管理了。根据SpringBoot的最佳实践在项目src/test/java目录下添加测试类。其次,测试类SpringBoot使用@springap-plicationconfiguration代替了@contextConfiguration配置Spring-Boot的应用上下文,还有两个常用的Annotation是@RunWith(SpringJUnit4ClassRunner.class)和@WebAppConfiguration,使用@transactional保证测试操作的回滚,具体的测试方法就完全按照Junit的方式做了。在controller层测试类为了Mock-Mvc而注入了WebApplicationContext。这里充分利用了SpringMVC的测试功能。测试的过程可以总结归纳为以下过程,为项目准备测试的环境;通过MockMvc来模拟执行http请求;增加验证的JUnitAssert还有处理结果Assert。收到MvcResult后进行自定义Assert又从新进行下一步的异步请求;最后卸载掉测试用的MockMvc环境,完成测试。总之SpringBoot利用和SpringMVC的关系将测试变得简单实用,为后期自动化集成测试奠定良好的基础。6SpringBoot监控和管理生产环境SpringBoot给web系统开发带来的改变中一个重要的方面就是监控和管理生产环境。如何实时监控应用系统信息的各项功能是否健康,就要通过系统各方面的性能安全指标数值来评估。这样可以在系统变得不稳定的时期就发现或解决问题,而不是系统功能停止时刻才发现,从而避免业务遭受打击。大规模互联网应用一定会有专门的网管系统,但应用系统内部情况就不会监控得那么细致了。Spring可以监控到什么信息呢,如:当前应用的所有配置、当前应用中所有的Bean的信息、所有配置属性、线程状态信息、当前环境信息、应用健康状况、当前应用的各项指标信息、所有@RequestMapping映射的路径、显示追踪信息以及所有EndPoint列表。可以看到内容非常丰富而且实用。这些监控信息通过监控和管理端点的形式提供给开发者。而前提是在P0M文件中加入spring-boot-starter-actuator这个依赖。在创建项目时可以选择Actuator、web和HATE0AS这几个模块。当项目部署完成可以通过httpURL地址访问到这些监控信息,如:可以看到所有EndPoint列表;可以看到所有Beans列表等。甚至还可以自定义端点对一些业务指标进行监控,这是任何市场盒装系统监控产品也做不到的。另外SpringBoot在web系统监控开发的提升开可以利用JMX(JavaManagementExtensions,即Java管理扩展)进行。7结束语SpringBoot对于Spring平台无疑是巨大的提升。无论在开发阶段还是部署测试阶段,甚至系统在线运行阶段,Spring-Boot都在发挥着他的作用。使web系统开发在多方面整
本文标题:应用SpringBoot改变web应用开发模式
链接地址:https://www.777doc.com/doc-5352592 .html