• 第二章 微服务构建: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注解来加载这些自定义参数。(方式很多种)
  • 相关阅读:
    java基础(上)
    java前奏
    Spring框架介绍
    bootstrap简单学习
    存储过程和函数
    触发器
    视图
    索引
    mysql增、删、改数据
    子查询
  • 原文地址:https://www.cnblogs.com/liao-xx/p/7326364.html
Copyright © 2020-2023  润新知