《SpringCloud 从入门到入土 》 第二章:微服务构建:Spring Boot
SprignBoot框架简介
本节主要简单介绍一下SpringBoot:除了它是SpringCloud的基础之外,也由于自身的各项优点,如自动配置、快速开发、轻松部署等,非常适合作为微服务架构中各项具体服务的构建单元。
SpringBoot除了解决配置问题之外,SpringBoot还通过一系列Starter POMs 的定义,让我们整合各项功能的时候,不需要在Maven的pom.xml中维护那些错综复杂的依赖关系,而是通过类似模块化的Starter模块定义引用,使得依赖管理工作变得更为简单。如今容器化大行其道的时代,SpringBoot除了可以很好的融入Docker之外,其自身就支持嵌入式的Tomcat、Jetty等容器。所以,通过SpringBoot构建的项目不再需要自身安装Tomcat,将自身应用打包成war,再部署到Tomcat这样复杂的构建与部署工作,只需要将SprignBoot应用打包成jar包,并通过java -jar 命令直接运行就能启动一个标准化的Web应用,非常轻便。
快速入门:
我们通过Spring 官方的项目构建工具Spring Initializer生成一个SpringBoot基础项目,并实现网页输出一个HelloWorld的RESTful接口。
配置文件:SpringBoot的默认配置文件位置为 src/main/resources/application.properties. 关于SpringBoot应用的配置文件内容 都可以几种在该文件中,根据我们引入的不同的Starter模块,可以在这里定义容器的端口号、数据库连接信息、日志级别等各种配置信息,比如,我们需要自定义WEB模块的服务端口号,可以在application.properties中添加server.port=8888 来制定服务的端口号为8888,也可以通过spring.application.name=hello类指定应用名(该名字在后续的SpringCloud中会被注册为服务名)。SpringBoot的配置文件可以只用传统的properties文件之外,还支持在被广泛推荐的YAML文件。
YAML (英语发音为 /‘jaemsl/,尾音类似 camel骆驼)是一个可读性高,用来 表达资料序列的格式。 YAML参考了其他多种语言,包括 C语言、Python、Perl, 并 从 XML、电子邮件的数据格式 ( RFC 2822)中获得灵感。 Clark Evans在 2001 年首次发表了这种语言, Ingy ddt Net与 Oren Ben-Kiki也是这种语言的共同设计 者。目前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。YAML是YAML Ain’t a Markup Language ( YAML不是一种标记语言)的缩写。在开发这种语言时, YAML的意思其实是 : Yet Another Markup Language (仍是一种标记语 言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重新命名。 YAML的语法和其他高阶语言类似,并且可以简单地表达清单、散列表、标量等形态。它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定文档、文件大纲(例 如,许多电子邮件标题格式和 YAML非常接近 ) 。 尽管它比较适合表达阶层式 ( hierarchical model)的数据结构,不过也有精致的语法可以表示关联性( relational model)的资料。由于 YAML使用空白符号和分行来分隔资料,使得它特别适合用 grep/Python/Perl /Ruby操作。其让人最容易上 手的特色是巧妙避开各种封闭符号,如引号、各种括号等,这些符号在巢状结构时会变得复杂而难以辨认。 ----------维基百科
YAML采用的配置格式不像properties的配置那样以单纯的简直对形式来表示,而是以类似大纲的缩进形式来表示,其结构更为清晰易读,同事配置内容的字符量也得到显著减少。除此之外,YAML还可以在一个单个的文件中通过spring.profiles属性来定义多个不同的环境配置。
注意:YAML目前还有一些不足,他无法通过@propertySource注解来加载配置、但是,YAML降属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义,YAML的配置方式比起properties配置文件更有优势。记住一个点,当application.properties和application.yml同时存在时,properties的优先级更高。
自定义参数:应用中可以通过@Value注解来加载自定义参数 ${},${}同样可以在配置文件中进行参数的引用。
使用随机数:
命令行参数:java -jar xxx.jar --server.port = 9999 ,可以世界以命令行的方式来设置server.port属性,并将应用的端口设置为9999,在用命令行的方式启动Springboot应用是 ,连续的两个减号 --就是对application.properties中的属性进行复制的标识。
多环境配置:我们在开发的时候,通常一套程序会被安装到几个不同的环境中,比如开发、测试、生产等,都需要不同的数据库地址、服务器端口,如果在未不同的环境打包都需要频繁修改配置文件的话,那必须是一个非常繁琐的事情。
对于多环境的配置,SpringBoot只需要提供几个满足 application-{profile}.properties 的格式,其中{profile}对应环境标识,如下所示:
application-dev.properties :开发环境
application-test.properties :测试环境
application-prod.properties :生产环境
以上三个配置文件,至于那个文件会被项目加载,需要早application.pro[perties 文件中通过spring.profiles.active属性来设置,其值对应配置文件名的 profile 值。如果spring.profiles.active = test ,那么就会加载application-test.properties配置文件的内容。