第二章 微服务构建:Spring Boot

  此处介绍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项目

  

 

  • 选择构建工具 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注解来加载这些自定义参数。(方式很多种)

 

 

posted on 2017-08-09 17:07  Sunday_xiao  阅读(478)  评论(0编辑  收藏  举报