使用Spring Boot构建应用程序

在这篇文章中,我们将探讨使用Spring Boot构建应用程序。 我们将介绍Spring Boot的不同方面以及使用Spring Boot构建应用程序的不同选项。

1. 介绍

Spring Boot有自己一套的约定,而且约定优于配置。Spring Boot通过用Spring平台自有的约定来消除大部分项目设置,这样新用户和现有用户就可以快速到达他们需要的开发节点。Spring Boot使创建一个以Spring为动力的企业应用程序变得非常容易,而且操作简单。

2. Spring Boot特性

Spring Boot提供以下开箱即用的功能:

  1. 它通过采用预定义的约定简化了Spring依赖关系(我们将会更详细地讨论它)。
  2. Spring Boot提供了一组预先配置的技术/框架来减少容易出错的配置,因此我们作为开发人员专注于构建业务逻辑而不是考虑项目设置。
  3. 你真的不需要为你的项目配置那些大的XML配置。
  4. 直接内嵌Tomcat、Jetty 或 Undertow。
  5. 提供预定义的Maven POM来简化你的配置。

3. 创建Spring Boot项目

启动一个项目的最主要挑战之一是初始化该项目的配置。我们需要对不同的目录结构进行调用,并且需要确保我们遵循所有行业标准。如果你使用的是Maven,那么你可能已经在使用Maven启动工件,它可以帮助我们更快地完成初始设置。

Spring Initializr是另外一个非常棒的快速启动一个Spring Boot项目的工具。Spring Initializr是一个生成Spring Boo项目的web应用。请记住,它只会生成项目结构,而不会根据你的偏好为你生成任何代码( Maven或Gradle )。如果你正在启动你的项目,我的推荐是使用Spring Initializr。

有几种方式来使用Spring Boot Initializr为你生成项目结构:

  1. 使用Spring Initializr Web界面
  2. 使用Spring Boot CLI工具
  3. 使用你的IDE

3.1 使用Spring Initializr Web界面

这是为你的应用生成项目结构的最简单方式。在你的浏览器打开Spring Initializr Web界面,你将看到一个向导来开始你的配置。

你需要在这个web界面填写一些信息:

  1. 你要生成哪一类项目(Maven还是Gradle)
  2. 你想用什么语言(除了Java,你还可以选择Kotlin或Groovy)
  3. Spring Boot的版本
  4. 项目的 GroupID和ArtifactID
  5. 选择所需依赖

在web界面里选择依赖是一个有趣的功能。基于你选择的依赖,web界面将自动在生成的pom.xml文件中增加 Spring Boot Starter 依赖。如果你想要更多地控制生成的项目结构,或者不确定要添加到项目中的依赖,请单击“切换到完整版”。

使用完整版本界面,你可以选择Java版本,打包模式(比如用于传统部署的war包)以及为项目选择依赖的选项。一旦你点击“生成项目”按钮,Spring Initializr将生成项目,你将下载得到一个zip文件。 你可以在IDE中将解压缩的项目作为基于Maven 或 Gradle的项目导入。

我将不会详细介绍如何在IDE中导入项目。 有关更多详细信息,请参阅相关的IDE文档。

3.2 使用Spring Boot CLI

我们也可以使用Srping Boot CLI来生成项目的结构。只要你安装了CLI,就可以打开终端输入spring。如果你正确安装了CLI,输入spring,回车后将看到如下类似的输出:

1
2
3
4
5
6
7
8
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来为你创建项目结构。如下例子:

1
2
3
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:

1
spring init --java-version=1.7 --dependencies=web springboot-demo-project

当执行上面的命令后,在项目的pom.xml文件里自动增加了Java 1.7相关的信息:

1
2
3
<properties>
<java.version>1.7</java.version>
</properties>

如果你不确认Spring init的功能有什么,可以带上标志 --list :

1
spring init --list

4. 查看pom.xml的内容

我们来看看pom.xml文件的内容,来更详细地了解Spring Boot的配置。我将只关注pox.xml里与Spring Boot有关的变化。如下是我们创建样例项目的pom.xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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会确保自动增加那些依赖。

5. 应用程序入口

1
2
3
4
5
6
7
8
@SpringBootApplication
public class EmsApplication {
public static void main(String[] args) {
SpringApplication.run(EmsApplication.class, args);
}
}

5.1 @SpringBootApplication注解

我们的主类用了@SpringBootApplication注解。@SpringBootApplication等同于同时使用@Configuration、@EnableAutoConfiguration和@ComponentScan。如果你启动你的项目,建议使用这个注解。使用@SpringBootApplication等同于同时使用如下三个注解:

  1. @Configuration 作为bean定义的来源。
  2. @EnableAutoConfiguration 它使得Spring Boot自动配置应用程序。
  3. @ComponentScan 它会自动扫描所有的Spring组件,包括使用了@Configuration注解的类。

5.2 主方法

我们主类的另一个有趣的地方是主方法。它是遵循标准Java工作流程的标准方法。 我们的主类将把控制权交给Spring Boot的 SpringApplication类。 SpringApplication类的run方法将用于引导应用程序。 我们将在后面更深入地观察SpringApplication。

6. Hello World 控制器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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控制器。

7. 运行应用

是时候运行我们第一个Spring Boot程序了。我们有几种方式来运行我们的Spring Boot程序。

  1. 如果我们使用IDE, 我们可以用IDE来运行我们Spring Boot程序。
  2. 我们可以在项目根目录下用 mvn spring-boot:run 命令来启动我们的第一个Spring Boot程序。
1
2
3
4
5
6
7
8
9
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: 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 。

总结

Spring Boot为基于Spring的应用程序提供了很好的推动力。在这篇文章中,我们学习了使用Spring Boot构建应用程序的不同选项。设置新项目始终是一项具有挑战性的任务,我们需要确保管理所有依赖,但是使用Spring Boot,这些都变得非常容易,我们能够只用几行代码就能运行第一个web应用程序,而无需过多考虑所需的依赖或程序的部署。

原文链接: https://www.javadevjournal.com/spring-boot/introduction-to-spring-boot/