你可能听说过Spring Boot,它的神奇功能可以创建一个不到140个字符的Spring Web应用程序,但这究竟意味着什么?这些功能为 Spring Boot 提供了如此强大的功能,并使Spring应用程序开发变得如此简单?那么,这就是你将在本文中学到的东西。
我们将更详细地讨论Spring Boot的自动配置,入门依赖项,Spring Boot CLI以及Actuator和Spring Initializer功能。这些功能可以消除编写基于Spring的Java Web应用程序相关的大部分痛苦和摩擦。
但在进入细节之前,让我们重新审视与基于Spring的Java开发相关的问题。我个人喜欢先看问题,然后在我享受解决方案之前先感受一下。请记住:努力工作后,舒适感会更好。用餐时也一样; 当你饿的时候,你会享受更多。
Spring是 - 毫无疑问 - 一个很棒的框架,它为你做了很多事情,例如它创建了一个对象,为它们提供了依赖,并且如果Spring不存在,它会带走你将要编写的大量代码,但是作为回报,它在配置和学习方面也向您提出了很多要求。
在过去,如果你从头开始一个全新的基于Spring的Java应用程序,你知道它不是小菜一碟。首先需要找到所需的所有依赖项,然后找到它们的兼容版本。你还需要配置很多bean来启用一些Spring魔法。
例如,如果要创建一个 基于Spring MVC的REST应用程序 ,它支持嵌入式Tomcat中的JSON格式,那么您可以在Maven pom.xml文件中创建至少8到10个依赖项,例如spring-core.jar, spring-mvc.jar,jackson.jar,embedded-tomcat.jar等,请注意,这是一个非常简单的设置。
Spring Boot消除了所有这些痛苦,让你编写重要的代码,即应用程序代码。我之前提到的所有Spring Boot功能,例如自动配置,Starter POM或Starter依赖项,以及Spring Boot CLI,旨在简化Spring的Java开发。
现在,让我们进一步详细介绍这些功能。
1.自动配置
您之前可能使用过基于Spring的Java Web应用程序,它连接到关系数据库,例如像H2这样的内存数据库,如果是,那么您可能知道需要将JdbcTemplate声明为bean并且还需要配置a DataSource,它是JDBC模板的依赖项。
在使用基于Java的配置的现代Spring应用程序中,您需要在Configuration类中添加以下两个方法:
@Bean <b>public</b> JdbcTemplate jdbcTempalte(DateSource ds){ <b>return</b> <b>new</b> JdbcTempalte(ds); } @Bean <b>public</b> DataSource dataSource(){ <b>return</b> <b>new</b> EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScripts('ddl.sql', 'data.sql') .build(); }
对于之前在Spring有过开发的人来说,这并不是很复杂,但是如果你要重新开始,那么可能需要数小时和数天才能解决这个问题。
但更重要的是,这是我们许多人编写的一段代码,与我们的应用程序无关。我的意思是,这段代码并不是唯一的,每个使用JDBC的Spring应用程序都需要它。
这就是Spring Boot AutoConfiguration 方法的用武之地。它会检测Classpath中是否存在某个Class,然后自动为您配置它。
例如,如果已将JDBC模板添加到类路径和H2.jar中,则Spring Boot可以自动为您配置内存数据库和可以使用的JDBC模板。您无需编写上述代码即可在DAO层中使用JDBC模板。
这只是一个例子。Spring Boot自动配置可以做出200多个这样的决定,并通过检查JAR依赖关系自动配置许多功能。例如,如果存在spring-mvc.jar,则它可以自动配置 DispatcherServlet , InternalViewResolver 等。
如果存在JPA和Hibernate,那么它也可以配置它,如果你有spring-security.jar,那么它甚至可以配置基本安全性来保护你的应用程序。请记住:当涉及到安全方面自动配置时,需要深入的知识才能正确保护您的应用程序。
默认情况下,自动配置功能处于禁用状态,您需要使用Configuration类@EnableAutoConfiguration 或 @SpringBootApplication 注释来启用它 。我通常会注释Main类,我将使用嵌入式Tomcat服务器运行它。
建议使用@SpringBootApplication Spring Boot 1.2以后的 注释,因为它结合了其他一些注释,使您的代码更具可读性。
简而言之,Spring Boot的自动配置功能可以节省大量工作并缩短开发时间,我强烈建议您在使用Spring Boot时使用自动配置。
2.入门POM
虽然 AutoConfiguration 消除了配置常见功能的痛苦,但Starter POM通过在项目中查找和添加公共依赖项来消除引入依赖包的痛苦。为了构建一个简单的基于Spring MVC的REST应用程序,它支持 Jackson 并将其运行为嵌入式容器,您至少需要以下依赖项:
通过使用Spring Boot Starter POM或入门依赖项功能,您只需在pom.xml中添加spring-boot-starter-web依赖项即可获得所有这些功能。
因此,您只需添加一个,而不是添加所有这些依赖项并担心其兼容版本。您还将更加自信使用经过试验和测试的库版本,并且将来不会出现任何不兼容问题。
Start POM功能的另一个细微好处是您不需要记住或搜索依赖项。如果要构建Web应用程序,可以添加“web”启动器。如果您正在构建 JPA应用程序 ,则可以通过聚合Spring Boot易于记忆和使用的常见依赖项和功能来添加“JPA”启动程序。
简而言之,Starter POM或入门依赖项是Spring Boot的另一个非常棒的功能,它真正有助于简化Spring应用程序开发。它就像是自动配置的近亲,你会经常一起使用它们。
3. Spring Boot CLI
Spring Boot CLI是Spring Boot框架提供的命令行界面,允许您使用Groovy编程语言创建基于Spring的Web应用程序。实际上,Groovy和Spring Boot很好地相互补充。Groovy旨在使Java开发更简单,而Spring Boot旨在使Spring应用程序开发更简单,并且彼此的简单性都受益。
虽然自动配置和入门依赖项是Spring Boot的一个不可或缺的功能,但Spring CLI是一个可选项。您还需要安装Spring CLI才能使用它。
这是一个简单的Groovy和Spring Boot CLI中的HelloWorld RESTful Web服务,它可以在不编译的情况下运行它,如下所示:
@RestController <b>class</b> HelloSpringBootController{ @RequestMapping(<font>"/"</font><font>) def hello() { <b>return</b> </font><font>"Hello Spring Boot CLI"</font><font> } } </font>
您可以在嵌入式容器上运行它,它包含Spring Boot CLI,没有web.xml,没有配置,也没有服务器设置。
如果您想知道这些事情是如何工作的,例如,Groovy如何了解 @RestController 和 @RequestMapping 注释,那么让我告诉您Spring Boot CLI利用自动配置和启动POM功能让您专注于只编写应用程序代码。
Spring Boot CLI会检测 @RestController 并 @RequestMapping 正在使用它,并且它知道需要将哪些启动器依赖项添加到类路径中才能使其工作。
一旦下载了这些依赖项系列,自动配置会自动启动并配置使用,例如一旦spring-boot-web-starter出现在类路径中,它会下载spring-mvc.jar然后自动配置自动配置 DispatcherServlet 并启用Spring MVC。
整个事情看起来像魔术,但它实际上很容易做到。如果你喜欢这种开发模式,我建议你通过 Craig Walls的 Spring Boot in Action 来深入学习Spring CLI。克雷格非常了解这个话题。
4.Actuator
actuator 是Spring Boot的另一个很棒的功能,它允许查看正在运行的Spring Boot应用程序中发生的事情。凭借其自动配置的优点,查看是否存在不知道的应用程序内部的风险以及Spring Actuator解决风险的风险。
它提供了有关在生产中运行应用程序的大量见解和指标。例如,通过使用 Actuator,您可以确切地找到在Application上下文中配置的bean,自动配置决策是什么,哪些环境变量,系统属性,命令行参数可用于应用程序等等。
您甚至可以获得应用程序处理的HTTP请求以及各种有用的应用程序指标,例如CPU和内存使用情况,垃圾收集详细信息,Web请求和数据源使用情况。
Spring Boot Actuator 还提供了几个端点来检索这些数据,例如,您可以使用RESTful API获取所有这些,或者您可以使用其远程shell功能安全地进入应用程序并通过发出命令获取所有这些信息。
它还使用JMX MBean公开所有这些功能,这意味着您可以使用JMX客户端(如JConsole)在运行时控制它们。
同时,您还需要保护对Actuator 端点的访问, 因为它不仅暴露机密信息,而且危险。例如,任何人都可以使用/shutdown 端点来停止您的应用程序 。
虽然,你不必担心。与任何其他Spring应用程序一样,您可以使用Spring Security来保护 Actuator 端点。
5. Spring Boot Initializer
Spring Initializer是Spring Boot的另一个特性,它解决了项目结构方面的问题。它是一个Web应用程序,允许您使用Java,Kotlin,Groovy或Spring Boot生成Maven或Gradle项目。
您需要提供的只是GUI中的Project MetaData,例如项目名称,组,工件等。它还允许您从大型列表中选择启动器依赖项,例如Web,JPA或安全启动器。
可以通过https://start.spring.io/访问Spring Initializer项目 。 创建项目后,您可以下载Zip文件,然后打开到Eclipse或IntelliJ IDEA等IDE。然后,您可以编辑此示例项目以与代码一起使用。
根据我的经验,许多Java和Spring开发人员面临的一个常见问题是如何启动项目。他们中的许多人对是否使用您的Java文件,资源文件等毫无头绪。
虽然 Maven ,Gradle, IntelliJ IDEA 和 Eclipse 有助于为您提供基本结构,但您仍然需要精通这两项技能才能获得先机,如果您不熟悉Maven或IDE,它可能是一个恶梦。
Spring Boot Initaizer解决了这个问题,并且可以很容易地创建一个基于Spring的Java应用程序,而无需真正了解Spring框架的许多内部细节。
这就是Java开发人员应该知道 的Spring Boot的一些功能 。这些功能确实使Java和Spring的工作变得有趣和高效,这就是为什么越来越多的公司采用Spring Boot for Java开发的原因。