此处介绍Spring Boot的目的除了它是Spring Cloud的基础外,也由于其自身的各项优点,如自动化配置、快速开发、轻松部署等,非常适合用作微服务架构中各项具体微服务的开发框架。
本章内容:
- 如何构建Spring Boot项目
- 如何实现RESTful API接口
- 如何实现多环境的Spring Boot应用配置
- 深入理解Spring Boot配置的启动机制
- Spring Boot应用的监控与管理
框架简介
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项目
- 通过官方的Spring Initializr工具来产生基础项目
- 访问 http://start.spring.io
- 选择构建工具 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应用
1、作为Java应用程序,可以直接通过运行拥有main函数的类来启动
2、在Maven配置中,之前提到了spring-boot插件,可以使用它来启动,比如执行:mvn spring-boot:run命令,或是直接单击IDE中对maven插件的工具
3、在服务器上部署运行时,通常先使用 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的配置方式可以减少配置内容的字符量,其结构也更为清晰易读。
自定义参数
可以在配置文件中定义一些我们需要的自定义属性,然后在应用中通过@Value注解来加载这些自定义参数。(方式很多种)