您可能已经听说过Spring Boot,这是用不到140个字符创建一个Spring Web应用程序的神奇力量,可以在一条推文中编写这些字符,但这到底意味着什么? 哪些功能可以使Spring Boot具有如此强大的功能并使Spring应用程序开发如此容易? 好吧,这就是您将在本文中学到的内容,但是如果您急着让我告诉您,您将详细了解Spring Boot的自动配置,Starter依赖项,Spring Boot CLI,Actuator和Spring Initializer功能。 这些功能消除了编写基于Spring的Java Web应用程序所带来的大部分痛苦和磨擦。
但是,在进行详细介绍之前,让我们重新回顾与基于Spring的Java开发相关的问题。 我个人希望先看到问题,然后才能享受解决方案。 请记住,只有经过艰苦的努力,舒适才会感觉更好,一顿饭也是如此,饥饿时您会享受更多。
毫无疑问,Spring是一个很棒的框架,它可以为您做很多事情,例如,它为您创建了一个对象,为它们提供了相关性,如果Spring不存在,它会带走您可能编写的许多代码,但作为回报它在配置和学习方面也要求您很多。
如果您曾经在一个未开发的项目中工作过,那么您从头开始启动了一个新的基于Spring的Java应用程序,那么您就会知道这并不是小菜一碟。 您首先需要找到所需的所有依赖项,然后是它们的兼容版本。 您还需要配置很多bean来启用一些Spring Magic。
例如,如果您要创建一个基于Spring MVC的REST应用程序 ,该应用程序在嵌入式tomcat中支持JSON格式,则您的Maven pom.xml文件(例如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,并且还需要配置一个DataSource。 JdbcTempalte的依赖项。
在使用基于Java的configuration
的现代Spring应用程序中,您需要将以下两种方法添加到您的
配置类:
@Bean
public JdbcTemplate jdbcTempalte(DateSource ds){return new JdbcTempalte(ds);
}@Bean
public DataSource dataSource(){return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).addScripts('ddl.sql', 'data.sql').build();
}
对于已经完成Spring开发的人来说,这并不是什么复杂的事情,但是如果您是从头开始的话,可能要花几个小时甚至几天才能弄清楚。
但是,更重要的是,这是我们许多人编写的一段代码,与我们的应用程序无关。 我的意思是,该代码不是唯一的,并且每个与JDBC兼容的Spring应用程序都需要它。
这就是Spring Boot AutoConfiguration出现的地方。 它检测到Classpath中存在某些Class,然后自动为您配置它。
例如,如果您已经将JdbcTempalte
和H2.jar添加到了类路径中,那么Spring Boot可以为您自动配置一个内存数据库和一个可供使用的JdbcTempatle。 您无需编写上述代码即可在DAO层中使用JdbcTemplate
。
这只是一个例子。 Spring Boot的自动配置可以做出200多种决策,并通过检查JAR依赖关系自动配置许多功能。 例如,如果存在spring-mvc.jar,则它可以自动配置DispatcherServlet , InternalViewResolver等。
如果存在JPA和Hibernate,则它也可以配置它,如果您具有spring-security.jar,则它甚至可以配置基本安全性来保护您的应用程序。
顺便说一句,当涉及到自动配置时,需要深入的知识来适当地保护您的应用程序。
默认情况下,自动配置功能是禁用的,您需要通过在Configuration类上使用@EnableAutoConfiguration
或@SpringBootApplication
批注来启用它。 我通常会注释Main类,它将与嵌入式Tomcat服务器一起运行。
从Spring Boot 1.2开始,建议使用@SpringBootApplication
批注,因为它结合了其他两个批注以使您的代码更具可读性。
简而言之,Spring Boot的自动配置功能可节省大量工作并减少开发时间,我强烈建议您在使用Spring Boot时使用自动配置。
2.入门级POM
尽管自动配置消除了配置通用功能的麻烦,但Starter POM通过在项目中查找和添加通用依赖关系而减轻了痛苦。
为了构建一个支持Jackson的简单的基于Spring MVC的REST应用程序并在嵌入式容器中运行它,您至少需要遵循以下依赖关系,例如
spring-core.jar
spring-web.jar
spring-webmvc.jar
jackson-databind.jar
tomcat-embed-core.jar
tomcat-embed-el.jar
tomcat-embed-logging-juil.jar
通过使用Spring Boot Starter POM或启动程序依赖项功能,只需在pom.xml中添加spring-boot-starter-web依赖项就可以获取所有这些信息
因此,您无需添加所有这些依赖项并担心它们的兼容版本,只需添加一个即可。 您还将更加自信地使用了久经考验的库版本,将来不会出现任何不兼容性问题。
入门POM功能的另一个细微优点是您无需记住或搜索依赖项。 如果要构建Web应用程序,则可以添加“ Web”启动器(如果要构建)
JPA应用程序可以通过按功能聚合常见的依赖项来添加“ jpa”启动程序,Spring Boot使它们易于记忆和使用。
顺便说一句,如果您想了解Starter POMs功能在内部如何工作,那么让我告诉您所有魔术都来自Maven或Gradle的传递依赖项功能。 是Maven或Gradle提取正确版本的库,Starter POM只是声明它们。 如果您想了解更多信息,建议您阅读Dan Vega的Spring Boot快速应用程序开发课程。
简而言之,Starter POM或Starter依赖项是Spring Boot的另一个很棒的功能,它确实有助于简化Spring应用程序的开发。 就像自动配置的近亲一样,您将经常一起使用它们。
3. Spring Boot CLI
在本文的第一段中,我说过现在可以创建一个Java Web应用程序,该应用程序可以放入推文中,并且由于Groovy和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
class HelloSpringBootController{@RequestMapping("/")def hello() {return "Hello Spring Boot CLI"}
}
就这样,您可以在Spring Boot CLI附带的嵌入式容器上运行它,无需web.xml,无需配置,也无需服务器设置。
如果您想知道这一切的工作原理,例如Groovy如何了解@RestController和@RequestMapping
注释,那么让我告诉您Spring Boot CLI利用自动配置和启动程序POMs功能让您专注于仅编写应用程序代码?
Spring Boot CLI检测到@RestController
和@RequestMapping
已在使用中,并且知道要添加到类路径中才能使其正常工作,需要哪些启动器依赖项。
一旦下载了这些系列的依赖项,自动配置就会自动启动并对其进行配置以供使用,例如,一旦spring-boot-web-starter进入图片,它就会下载spring-mvc.jar,然后自动配置会自动配置DispatcherServlet并启用Spring MVC。
整件事看起来像是魔术,但这是现实。
4.执行器
该执行器是Spring Boot的另一个很棒的功能,它可以查看正在运行的Spring Boot应用程序中发生的情况。 由于具有自动配置的所有优点,因此存在不知道应用程序内部内容是什么的风险,并且该风险由Spring Actuator解决。
它提供了有关生产中正在运行的应用程序的大量见解和指标。 例如,通过使用Actuator,您可以准确找出在Application上下文中配置了哪些bean,做出了哪些自动配置决策,哪些环境变量,系统属性,命令行参数可用于应用程序等等。
您甚至可以跟踪应用程序处理的HTTP请求以及各种有用的应用程序指标,例如CPU和内存使用率,垃圾收集详细信息,Web请求和数据源使用率。
Spring Boot Actuator还提供了多个端点来检索此数据,例如,您可以使用RESTful API来获取所有这些数据,或者可以使用其远程Shell功能来安全地进入应用程序内部并通过发出命令来获取所有这些信息。
它还使用JMX MBean公开了所有这些功能,这意味着您可以在运行时使用JConsole之类的JMX客户端来控制它们。
同时,您还需要保护对Actuator端点的访问,因为它不仅会泄露机密信息,而且很危险。 例如,任何人都可以使用/ shutdown端点来停止您的应用程序。
不过,您不必担心。 像其他任何Spring应用程序一样,您可以使用Spring Security保护Actuator端点。
5. Spring Boot初始化器
Spring Initializer是Spring Boot的另一个功能,可以解决项目结构方面的问题。 这是一个Web应用程序,允许您使用Java,Kotline或Groovy和Spring Boot生成Maven或Gradle项目。
您需要指定的只是在GUI中提供项目元数据,例如项目名称,组,工件等。它还允许您从较大的列表中选择启动程序依赖性,例如Web,JPA或安全启动程序。
可以从https://start.spring.io/访问Spring Initializer项目。 创建项目后,您可以下载Zip文件,然后按Nelson Djalo的Spring Boot Essential课程中的说明打开到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进行Java开发的原因。 对具有Spring Boot经验的Java开发人员的需求也很高,如果您正在寻找下一个Java Web开发人员的工作,那么Spring Boot的技能确实会有所作为。
到目前为止,非常感谢您阅读本文。 如果您喜欢这些Spring Boot功能,请与您的朋友和同事分享。 如果您有任何疑问或反馈,请留言
翻译自: https://www.javacodegeeks.com/2018/11/spring-features-java-developers-know.html