Spring Boot快速入门

Spring Boot的理解

  以前开发基于SpringMVC的web程序,需要运行在专门的容器里(例如Tomcat),然后从web.xml开始,添加Spring相关的配置。这些配置很多都是固定,或者约定俗成的,但是配置也是比较繁琐。所以Spring Boot就是为了简化这些配置,程序启动时,就创建了一些默认的配置。开发人员只需很少配置,可以直接使用,运行时直接可以用java -jar 方式来运行Spring Boot程序

主要特性

  • Spring Boot Starter:它将常用的依赖分组进行整合,将其合并到一个依赖中,这样就可以一次性添加到项目
  • 自动配置:Spring Boot 利用了Spring4.x对条件化配置的支持,合理地调测应用所需的bean病自动化配置他们
  • 命令行借口:(Command-line interface,CLI),Spring Boot的CLI发挥了Groovy编程语言的有点,结合自动配置进一步简化Spring应用的开发
  • Actuator:它为Spring Boot应用添加了一定的监控管理特性。

Spring Boot快速入门

Maven构建

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
<?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.zhang</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

继承starter parent方式

在parent里,指定号Spring Boot的版本

1
2
3
4
5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>

  采用这种方式的好处在于,如果要添加相关starter的依赖,可以省略掉版本号,因为在parent里已经设置好版本(详情可以了解parent的pom信息)。应用这种方式时,一般没有parent

不使用parent POM

1
2
3
4
5
6
7
8
9
10
11
12
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

  如果项目是有个模块,即一个parent的pom下有多个module,可以在parent的pom里定义这个依赖。然后在子module里,继承这个parent。

maven plugin

1
2
3
4
5
6
7
8
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

  这个plugin用来把Spring Boot应用,包括它依赖的其他jar,最终打包成一个可执行的jar包。

Java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}

@RestController注解
  在SpringMVC中,如果是控制器类,在类名上加@Controller注解。如果这个类的某个返回的String是JSON格式的,在方法上加@ResponseBody。如果所有方法都是返回JSON,也就是REST风格的,那直接在类上加@RestController注解
@EnableAutoConfiguration注解
  Spring Boot应用程序的入口类,main方法中通过SpringApplication.run启动。

用Spring Initializer创建

  用浏览器输入http://start.spring.io/,打开时Spring Boot项目生成页面。
  输入相应的Group、Artifact以及依赖,比如创建Web项目,搜索选择Web,如下图

Spring Initializer

输入完毕后,点击Generat Project按钮,会弹出下载,把它下载下来,然后导入到IDE即可。

用IntelliJ IDEA创建

IntelliJ IDEA有创建SpringBoot项目的功能,不过需要的是收费的终极版,普通版没有。

Spring Boot über jar

  Spring Boot 旨在帮助开发人员创建能直接运行的应用程序。为实现该目的,它将应用程序及其依赖项包装在一个可执行 JAR 中。要运行您的应用程序,可以像这样启动 Java:
$ java -jar executableJar.jar
  如果用解压缩工具打开这个jar包,会发现这个jar包里,除了一些.class文件,还嵌套了其他依赖的jar包。因为 Java 没有提供加载嵌套式 JAR 的标准方式,所以开发人员多年来一直使用 Apache Maven Shade 插件 等工具来构建 “shaded” JAR。shaded JAR 仅包含来自应用程序的所有依赖 JAR 的 .class 文件。但随着应用程序复杂性的增加和依赖项的增多,shaded JAR 可能遇到两个问题:

  • 名称冲突,不同 JAR 中的两个类采用了相同名称。
  • 依赖项版本问题,两个 JAR 使用同一个依赖项的不同版本。
    Spring Boot 解决这些问题的方法是定义一种 特殊的 JAR 文件布局,其中的 JAR 本身嵌套在 über JAR 中。Spring 支持工具(例如 spring-boot-maven 插件)随后会构建这个可执行的 über JAR,使其符合该布局(不只是像shaded JAR 一样解包和重新打包 .class 文件)。运行这个可执行 JAR 时,Spring Boot 使用了一个特殊的类加载器来处理嵌套式 JAR 中的类。

参考资料