初识Spring Boot

来源:互联网 发布:淘宝盗图申诉包过 编辑:程序博客网 时间:2024/06/16 06:22

Spring Boot介绍

从Spring FrameWork的第一个beta版本发布至今大约有14年的时间,Spring FrameWork提供了在不需要Sun Microsystems公开发布J2EE的复杂体系结构的情况下创建企业级应用程序。

Spring FrameWork作为一个开源项目发布并得到了很好的接受。在快速构建可靠的企业级应用程序领域,Spring FrameWork已经变成了最好的开源框架,该框架通过非常优雅的方式充分使用了设计模式的优点并且成为了第一批使用依赖注入模式(Dependency of Injection)的框架之一。Spring FrameWork在开源社区获得了很多的奖项并且通过不断的添加新的功能和嵌入新的技术持续保持迭代。帮助开发者将关注点放到自身应用的逻辑上而将繁重的底层工作交给Spring FrameWork。

Spring Boot并不会替代Spring FrameWork,因为Spring Boot就是属于Spring FrameWork,你可以看到Spring Boot是使用一种更简单的新的方式去创建Spring应用。

Spring Boot简化了开发方式,它使开发独立的, 产品级别的基于Spring的应用变得非常简单, 你只需”just run”。Spring Boot最棒的功能之一就是Spring Boot采用的是“opinionated”技术,通过这种技术的使用可以帮助用户在创建稳定、可拓展的Spring应用会有更好的实践。

Spring 应用

如果你是一个Spring的开发者,你可能已经了解到如果要创建一个简单的Spring Web应用程序,你必须要遵从一些特定的J2EE stack和一些Spring FrameWork的规则。这些规则包括:

创建文件结构并包含你的WAR(Web ARchive):

  1. 必须包含一个WEB-INF文件夹,WEB-INF文件夹下包含lib和classes子文件夹,lib文件夹下包含第三方库,classes目录下包含你的应用的类。
  2. 一些JSP文件(如有必要),HTML、CSS、images, 和JavaScript(如果有必要)文件。
  3. 包含Spring org.springframework.web.servlet.DispatcherServlet类的web.xml文件。
  4. 你的Spring beans放在格式为<servlet-name>-servlet.xml的文件中。

使用通用工具打包WAR文件。你可以使用jar工具,但是大多数人都会使用应用更加广泛的Apache Maven, Gradle,在一些很老的机构,你可能会使用Apache Ant编译、测试和创建WAR文件。

使用应用服务器或者容器运行你的WAR文件,如Tomcats, Jetty, Jboss, 或者WebSphere。有一些情况下你需要特定的服务器部署J2EE应用。

即使它仅仅只有几步,但是实际上当你有很多资源文件和类以及你需要包含、装配和使用很多Spring beans时,这也是很痛苦的。

大多数Spring Boot的应用程序只需要很少的配置信息。

你可以使用Spring Boot创建Java应用程序,通过java -jar命令启动或者传统的war包部署方式。官方也提供了一个运行“spring scripts”的命令行工具。这并不是批判这种Spring web应用程序的开发方式,但是我认为更多的是你使用什么工具帮助你去避免一些特殊的麻烦。工具的范围从类似STS(https://spring.io/tools)这样的IDE工具到类似于YEOMAN(http://yeoman.io/)这样的外部工具,IDE工具帮助你包含正确的Spring XML模式定义你自己的beans,外部工具帮助你创建结构且避免一切样板设置。

我们仅仅只是讨论一个很简单的Spring Web应用程序,但是当你需要包含一些持久化组件、消息组件或者你需要包含安全组件的时候,那将会发生什么?然而你需要一种简单的方式去管理你的依赖。当然,最简单的方法是下载每个依赖,但这将会变成一个噩梦。最好的方式是使用类似Apache Maven 或 Gradle 这样的工具帮助你管理这些依赖。

相信我,有更好的方式开发Spring应用。

为什么选择Spring Boot?

Spring Boot有很多的功能适合于:

  • 遵循云原生应用的12个要素(Netflix引擎团队开发http://12factor.net/);

  • 通过减少开发和部署的时间提高生产率;

  • 企业生产就绪(Enterprise-production-ready)的Spring应用;

  • 非功能性需求(Non-functional requirements),例如Spring Boot Actuator(包含 指标, 健康检测和管理的模块)和被嵌入的用于运行Web应用的容器(如Tomcat, Undertow, Jetty等)。

“microservices”这个术语在创建可扩展,高可用性和强大的应用程序方面备受关注,Spring Boot非常适合这种场景,它允许开发人员只关注业务逻辑而将繁重的底层工作交给Spring FrameWork。

Spring Boot的特性

Spring Boot拥有非常多的特性:

  • SpringApplication类,在Java Spring Boot应用中, main方法执行这个单例类,这个特殊的类提供了一中非常便捷的方式去初始化Spring应用。

  • Spring Boot允许你在没有任何xml配置的情况下创建应用。Spring Boot不会生成代码。

  • Spring Boot通过SpringApplicationBuilder单例类提供了一种流畅的构建器(builder)API,SpringApplicationBuilder允许你通过多个上下文(multiple application contexts)创建分层的ApplicationContext。这个特殊的特性与Spring框架以及它在内部如何工作有关。

  • Spring Boot提供了很多种方式去配置Spring应用的事件和监听。

  • Spring Boot是一个“opinionated”技术,他所指的是Spring Boot会尝试创建正确的应用类型,要么是一个Web应用程序(通过内嵌Tomcats或者Jetty容器),要么是一个单例应用。

  • ApplicationArguments接口。Spring Boot允许你访问任何应用参数。这在当程序运行需要参数时时很有用的。例如,你可以使用–debug mylog.txt或者–audit=true且访问他们的值。

  • Spring Boot允许在应用程序启动之后执行代码。但是你需要实现CommandLineRunner接口并提供run(String …args)方法的实现。一个特殊的例子就是在应用程序启动之后需要在数据库中初始化一些记录或者检查一些服务看这些服务在应用启动之前是否正常运行。

  • Spring Boot允许通过pplication.properties或application.yml配置文件外化你的配置。

  • 你可以通过Java管理扩展(JMX)来添加管理相关的特征。如果你要使用这种特性,最简单的方式就是在application.properties或application.yml配置文件中启用spring.application.admin.enabled属性。

  • Spring Boot允许通过profiles帮助应用程序在不同的环境中运行。

  • Spring Boot允许通过非常便捷的方式配置和使用日志(logging)。

  • Spring Boot通过使用starter poms这种非常简单的方式去配置和管理依赖。换句话说,如果你要创建一个web应用程序,你只需要包含spring-boot-start-web依赖到你的Maven pom文件或者Gradle构建文件即可。

  • Spring Boot通过Spring Boot Actuator提供了开箱即用的非功能性需求,因此你可以看到你应用程序的健康,内存等等。

  • Spring Boot提供@Enable<feature>注解帮助你引用、配置和使用类似于数据库(SQL和NOSQL),缓存(caching)、调度(scheduling)、消息(messaging)、Spring集成(Spring integration)、批处理(batching)等技术。