在这篇文章中,我们将探讨使用Spring Boot构建应用程序。 我们将介绍Spring Boot的不同方面以及使用Spring Boot构建应用程序的不同选项。
Spring Boot有自己一套的约定,而且约定优于配置。Spring Boot通过用Spring平台自有的约定来消除大部分项目设置,这样新用户和现有用户就可以快速到达他们需要的开发节点。Spring Boot使创建一个以Spring为动力的企业应用程序变得非常容易,而且操作简单。
Spring Boot提供以下开箱即用的功能:
启动一个项目的最主要挑战之一是初始化该项目的配置。我们需要对不同的目录结构进行调用,并且需要确保我们遵循所有行业标准。如果你使用的是Maven,那么你可能已经在使用Maven启动工件,它可以帮助我们更快地完成初始设置。
Spring Initializr是另外一个非常棒的快速启动一个Spring Boot项目的工具。Spring Initializr是一个生成Spring Boo项目的web应用。请记住,它只会生成项目结构,而不会根据你的偏好为你生成任何代码( Maven或Gradle )。如果你正在启动你的项目,我的推荐是使用Spring Initializr。
有几种方式来使用Spring Boot Initializr为你生成项目结构:
这是为你的应用生成项目结构的最简单方式。在你的浏览器打开Spring Initializr Web界面,你将看到一个向导来开始你的配置。
你需要在这个web界面填写一些信息:
在web界面里选择依赖是一个有趣的功能。基于你选择的依赖,web界面将自动在生成的pom.xml文件中增加 Spring Boot Starter 依赖。如果你想要更多地控制生成的项目结构,或者不确定要添加到项目中的依赖,请单击“切换到完整版”。
使用完整版本界面,你可以选择Java版本,打包模式(比如用于传统部署的war包)以及为项目选择依赖的选项。一旦你点击“生成项目”按钮,Spring Initializr将生成项目,你将下载得到一个zip文件。 你可以在IDE中将解压缩的项目作为基于Maven 或 Gradle的项目导入。
我将不会详细介绍如何在IDE中导入项目。 有关更多详细信息,请参阅相关的IDE文档。
我们也可以使用Srping Boot CLI来生成项目的结构。只要你安装了CLI,就可以打开终端输入spring。如果你正确安装了CLI,输入spring,回车后将看到如下类似的输出:
localhost:~ javadevjournal$ spring usage: spring [--help] [--version] [<args>] Available commands are: run [options] [--] [args] Run a spring groovy script
我们可以在spring命令后使用init作为额外的参数来创建一个新的项目。Spring Boot CLI将在其内部使用start.spring.io来为你创建项目结构。如下例子:
localhost:~ javadevjournal$ spring init --dependencies=web springboot-demo-project Using service at https://start.spring.io Project extracted to '/Users/umesh/springboot-demo-project'
上述命令将创建一个基于Maven的使用spring-boot-starter-web的项目,目录名为springboot-demo-project。这和使用start.spring.io的web界面创建的项目是一样的效果。我们可以传递不同的参数来自定义项目的生成。
比如,我们想创建基于Java 1.7的项目,我们可以传递 --java-version=1.7 作为额外参数给Spring Boot CLI:
spring init --java-version=1.7 --dependencies=web springboot-demo-project
当执行上面的命令后,在项目的pom.xml文件里自动增加了Java 1.7相关的信息:
<properties> <java.version>1.7</java.version> </properties>
如果你不确认Spring init的功能有什么,可以带上标志 --list :
spring init --list
我们来看看pom.xml文件的内容,来更详细地了解Spring Boot的配置。我将只关注pox.xml里与Spring Boot有关的变化。如下是我们创建样例项目的pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.umeshawasthi</groupId> <artifactId>ems</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>ems</name> <description>Employee Management System outline Spring Boot Features</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <!-- project properties repository --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- Spring boot test depedency --> </dependencies> </project>
Spring Boot最主要的特色就是“ Starters ”,它们是增加依赖包到classpath的便捷方式。使用Spring Boot的时候,我们不需要增加jar包或依赖到classpath(如果一个starter不可用了,你可以自己增加所需依赖到classpath,或者创建你自己的starter)。我们仅需要增加正确的“Starters”到我们的pom.xml里,Spring Boot会确保自动增加那些依赖。
@SpringBootApplication public class EmsApplication{ public static void main(String[] args){ SpringApplication.run(EmsApplication.class, args); } }
我们的主类用了@SpringBootApplication注解。@SpringBootApplication等同于同时使用@Configuration、@EnableAutoConfiguration和@ComponentScan。如果你启动你的项目,建议使用这个注解。使用@SpringBootApplication等同于同时使用如下三个注解:
@Configuration
作为bean定义的来源。 @EnableAutoConfiguration
它使得Spring Boot自动配置应用程序。 @ComponentScan
它会自动扫描所有的Spring组件,包括使用了 @Configuration
注解的类。 我们主类的另一个有趣的地方是主方法。它是遵循标准Java工作流程的标准方法。 我们的主类将把控制权交给Spring Boot的 SpringApplication类。 SpringApplication类的run方法将用于引导应用程序。 我们将在后面更深入地观察SpringApplication。
package com.javadevjournal.demo.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController{ @RequestMapping("/") public String helloWorld(){ return "Hello World!!"; } }
控制器非常简单。它是使用Spring MVC标准注解的Spring MVC控制器。
是时候运行我们第一个Spring Boot程序了。我们有几种方式来运行我们的Spring Boot程序。
mvn spring-boot:run
命令来启动我们的第一个Spring Boot程序。 . ____ _ __ _ _ /// / ___'_ __ _ _(_)_ __ __ _ / / / / ( ( )/___ | '_ | '_| | '_ // _` | / / / / /// ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_/__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.4.RELEASE) 2017-07-08 15:49:50.319 INFO 1238 --- [ main] com.javadevjournal.demo.EmsApplication : Starting EmsApplication on localhost with
打开浏览器,输入 http://localhost:8080 ,回车,我们将看到 Hello World 。