此处介绍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注解来加载这些自定义参数。(方式很多种)

第二章 微服务构建:Spring Boot的更多相关文章

  1. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

  2. Spring boot学习1 构建微服务:Spring boot 入门篇

    Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  3. 微服务下 Spring Boot Maven 工程依赖关系管理

    单体 Spring Boot Maven 工程 最基本的 pom.xml 包含工程信息.Spring Boot 父工程.属性配置.依赖包.构建插件 <?xml version="1.0 ...

  4. SpringCloud(8)微服务监控Spring Boot Admin

    1.简介 Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件.Spring Boot Admin 分为 Server 端和 Client 端,Spring ...

  5. 构建微服务:Spring boot 入门篇

    什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而 ...

  6. Java微服务之Spring Boot on Docker

    本文学习前提:Java, Spring Boot, Docker, Spring Cloud 一.准备工作 1.1 安装Docker环境 这一部分请参考我的另一篇文章<ASP.NET Core ...

  7. spring boot 2.0.3+spring cloud (Finchley)8、微服务监控Spring Boot Admin

    参考:Spring Boot Admin 2.0 上手 Spring Boot Admin 用于管理和监控一个或多个Spring Boot程序,在 Spring Boot Actuator 的基础上提 ...

  8. 小马哥-Java 微服务实践 - Spring Boot 系列-01Java 微服务实践 - Spring Boot 系列(一)初体验

    课程github地址 https://github.com/mercyblitz/segmentfault-lessons 传统的web应用架构.微服务是一种架构.不限定什么语言 单体应用和微服务的对 ...

  9. 第二章 微服务网关基础组件 - zuul入门

    一.zuul简介 1.作用 zuul使用一系列的filter实现以下功能 认证和安全 - 对每一个resource进行身份认证 追踪和监控 - 实时观察后端微服务的TPS.响应时间,失败数量等准确的信 ...

随机推荐

  1. windbg获取打印

    经常有QT MFC程序调用动态库无法查看内部打印 解决办法: 文件头部定义: #define UseDebugView #ifdef UseDebugView char g_Debug[256]; # ...

  2. [leetcode]150. Evaluate Reverse Polish Notation逆波兰表示法

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  3. [leetcode]13. Roman to Integer罗马数字转整数

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  4. Annotation 标注

    1.画出基本图 当图线中某些特殊地方需要标注时,我们可以使用 annotation. matplotlib 中的 annotation 有两种方法, 一种是用 plt 里面的 annotate,一种是 ...

  5. BZOJ4381 : [POI2015]Odwiedziny / Luogu3591[POI2015]ODW - 分块+树剖

    Solution 在步伐$pace$比较小的时候, 我们发现用前缀和直接维护会很快 而在$pace$比较大的时候, 则暴力往上跳会最优 设$blo= \sqrt{N}$ 若$pace<=blo$ ...

  6. CSP里的xss

    无CSP保护下的xss 1.直接嵌入型 <img src="192.168.81.137:80/xss.php?a=[cookie]"> 过滤较少时,优先考虑.触发方式 ...

  7. boost asio 学习(五) 错误处理

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Erro ...

  8. Reading | 《Linux就该这么学》

    目录 一.前言 1.Linux概念 2.RPM(红帽软件包管理器) 3.Yum软件仓库 二.常用Linux命令 1.Shell 2.命令基本格式和man命令 3.常用系统工作命令 echo命令 dat ...

  9. Vuejs——(6)Vuejs与form元素

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   资料来于官方文档: http://cn.vuejs.org/guide/forms.html 本 ...

  10. utf-8 decode

    摘自 Lua 5.3 源文件 lutf8lib.c /* ** Decode one UTF-8 sequence, returning NULL if byte sequence is invali ...