Spring Boot经过大量的自动化配置等方式简化了Spring原有样板化的配置,使开发者能够快速构建应用。除此以外,Spring Boot还经过一系列Starter POMs的定义,让咱们整合各项功能的时候,不须要再Maven的pom.xml中维护那些复杂的依赖关系,而是经过相似模块化的starter模块定义来引用,使得依赖管理工做变得更为简单。
在现在容器化大行其道的时代,Spring Boot除了能够很好融入Docker以外,其自身就支持嵌入式的Tomcat、Jetty等容器。因此,经过Spring Boot构建的应用能够再也不安装Tomcat,将应用打成war,再部署到Tomcat这样复杂的构建与部署动做,只需将Spring boot应用打成jar包,并经过java -jar命令直接运行就能启动一个标准化的web应用,这使得Spring boot应用十分轻便。
项目构建与解析
1 系统及工具版本要求
- java 7 及以上版本
- Spring framework 4.2.7及以上版本
- Maven 3.2 及以上版本 / Gradle 1.12 及以上版本
2 构建Maven项目

- 选择构建工具 Maven Project、Spring boot版本选择1.3.7以上,填写Group和Artifact信息,在Search for dependencies 中搜索须要的其余依赖包,由于要实现RESTful API,因此能够添加Web依赖。
- 单击Generate Project按钮下载项目压缩包
- 解压项目包,并用IDE以Maven项目导入。
工程结构解析

- src/main/java: 主程序入口HelloApplication,可经过该类直接启动Spring Boot项目
- src/main/resources:配置目录,引入配置信息。因为引入了Web模块,所以产生了static目录和templates目录,前者存放静态资源,如图片、CSS、javascript等;后者用于存放Web页面的模板文件
- src/test:单元测试目录,生成的HelloApplicationTests经过JUnit4实现,能够直接用运行Spring Boot应用的测试。
Maven配置分析
<?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.example</groupId>
<artifactId>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
能够看到,groupId和artifactId对应生成项目时页面上输入的内容。另外,默认的打包形式为jar,由于默认的web模块依赖会包含嵌入式的Tomcat,使应用的jar自身就具有了提供web服务的能力
父项目parent配置中定义了Spring Boot版本的基础依赖以及一些默认配置内容,好比,配置文件application.properties的位置等。
在项目依赖dependencies配置中,包含了下面两项:
spring-boot-starter-web:全栈Web开发模块,包含嵌入式Tomcat、Spring MVC。
spring-boot-starter-test:经过测试模块,包含JUnit、Hamcrest、Mockito。
这里所引用的web和test模块,在Spring Boot生态中被称为Starter POMs。Starter POMs是一系列轻便的依赖包,是一套一站式的Spring相关技术的解决方案。开发者在使用和整合模块时,没必要再去搜寻样例式的依赖配置来复制使用,只需引入对应的模块包便可。好比,开发web应用的时候,就引入spring-boot-starter-web,但愿应用具有访问数据库能力的时候,那就再引入spring-boot-starter-jdbc或是更好用的spring-boot-starter-data-jpa。
Spring boot的Starter POMs采用spring-boot-starter-*的命名方式,*表明一个特别的应用功能模块。
在最后项目构建的build部分,引入Spring boot的Maven插件,帮助方便的启停应用,这样在开发时就不用每次去找主类或是打包成jar来运行微服务,只须要经过 mvn spring-boot:run 命令就能够快速启动spring boot应用。
实现RESTful API
在Spring boot中建立RESTful API的实现代码和Spring MVC应用同样,只是减小了一些配置文件,能够直接开始编写Controller内容。
@RestController
public class HelloController {
@RequestMapping(value = "index")
public String index(){
return "hello";
}
}
启动该应用,经过浏览器访问http://localhost:8080/index,返回预期效果:hello。
启动Spring Boot应用
一、做为Java应用程序,能够直接经过运行拥有main函数的类来启动
二、在Maven配置中,以前提到了spring-boot插件,可使用它来启动,好比执行:mvn spring-boot:run命令,或是直接单击IDE中对maven插件的工具
三、在服务器上部署运行时,一般先使用 mvn install 将应用打包成jar包,再经过 java -jar xxx.jar 来启动应用。
配置详解
配置文件
在上述示例中提到过src/main.resources目录是Spring Boot的配置目录,因此当要为应用建立个性化配置时,应在该目录下进行。
Spring Boot的默认配置文件位置为src/mian/resources/application.properties。关于Spring boot应用的配置内容均可以几种在该文件中,根据咱们引入的不一样starter模块,能够在这里定义容器端口号、数据库链接信息、日志级别等各类配置信息。好比要修改web模块的服务端口号,能够在application.properties文件中添加 server.port=8888 来指定服务端口为8888(默认端口为8080)。
Spring boot的配置文件除了可使用传统的properties文件以外,还支持YAML文件。
YAML采用的配置格式不像properties的配置那样以单纯的键值对形式来表示,而是以相似大纲的缩进形式来表示。好比
server:
port: 9996
contextPath: /webux
tomcat:
uri-encoding: utf-8
spring:
application:
name: emer-business-webux
thymeleaf:
cache: false
suffix: .html
content-type: text/html; charset=utf-8
enabled: true
encoding: utf-8
经过YAML的配置方式能够减小配置内容的字符量,其结构也更为清晰易读。javascript
自定义参数
能够在配置文件中定义一些咱们须要的自定义属性,而后在应用中经过@Value注解来加载这些自定义参数。(方式不少种)