SpringCloud微服务实战学习系列配置详解

Posted dream-to-pku

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud微服务实战学习系列配置详解相关的知识,希望对你有一定的参考价值。

前言

Spring Boot针对常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化配置内容。

一、配置文件

Spring Boot的默认配置文件位置为src/main.resources/application.properties。关于Spring Boot应用的配置内容都可以集中在该文件中,根据我们引入的不太Starter模块,我们解压在这里定义容器端口号、数据库连接信息、日志级别等各种配置信息。eg:我们需要自定义Web模块的服务端口号可以在application.properties中添加server.port=8888来指定服务端口为8888,也可以通过spring.application.name=hello来指定应用名(该名字在后续Spring Cloud中会被注册为服务名)

Spring Boot的配置文件除了可以使用传统的properties文件之外,还支持现在被广泛推荐使用的YAML文件。

YAML是一个可读性高,用来表达资料序列的格式。YAML参考了其他多种语言,包括C语言、Python、Perl、并从XML电子邮件的数据格式中获得两个它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定文档、文件大纲。

YAML采用的配置格式不像properties的配置那样以单纯的键值对形式来表示,而是以类似大纲的缩进形式来表示:

1 environments:
2     dev:
3         url:http://dev.bar.com
4         name=Developer Setup
5     prod:
6         url:http://foo.bar.com
7         name:My Cool App

等价于

1 environments.dev.url=http://dev.bar.com
2 environments.dev.name=Developer Setup
3 environments.prod.url=http://foo.bar.com
4 environments.prod.name=My Cool App

可以看到YAML的配置方式结构清晰易读,同时配置内容字符量减少。除此之外,YAML还可以在一个单独文件中通过使用spring.profiles属性来定义多个不同的环境配置。例如下面表示在指定为test环境时,server.port将使用8882端口;在prod环境中,server.port将使用8883端口;如果没有指定环境,server.port将使用8881端口。

 1 server:
 2     port:8881
 3 ---
 4 spring:
 5     profiles:test
 6 server:
 7     port:8882
 8 ---
 9 spring:
10     profiles:prod
11 server:
12     port:8883
13    

注:YAML无法通过@PropertySource注解来加载配置,但是YAML将属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义时,YAML的配置方式比起properties配置文件更有优势。

二、自定义参数

除了可以在Spring Boot的配置文件中设置各个Starter模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性。比如在application.properties中添加

1 book.name=SpringCloudInAction
2 book.author=Slp

然后在应用中可以通过@Value注解来加载这些自定义参数,比如

1 @Component
2 public class Book{
3     @Value("${book.name}")
4     private String name;
5     @Value("${book.author}")
6     private String author;
7     //省略getter和setter
8 }

@Value注解加载属性值的时候可以支持两种表达式来进行配置

1、PlaceHolder方式,格式为${...},{}内未PlaceHolder

2、使用SpEL表达式,格式为#{...},{}内为SpEL表达式

三、参数引用

在application.properties中的各个参数之间可以直接使用PlaceHolder的方式来应用,如:

1 book.name=SpringCloud
2 book.author=Slp
3 book.desc=${book.author} is read <${book.name}>

四、使用随机数

在一些特殊情况下,我们希望有些参数每次被加载的时候不是一个固定的值,比如秘钥、服务端口等。在Spring Boot的配置文件中,可用通过用${random}配置来生成随机的int值,long值,或者String字符串。这样就不用通过编码来实现这些逻辑。

 1 #随机字符串
 2 com.slp.blog.value=${random.value}
 3 #随机int
 4 com.slp.blog.number=${random.int}
 5 #随机long
 6 com.slp.blog.bignumber=${random.long}
 7 #10以内的随机数
 8 com.slp.blog.test1=${random.int(10)}
 9 #10-20的随机数
10 com.slp.blog.test2=${random.int[10,20]}

 

以上是关于SpringCloud微服务实战学习系列配置详解的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud Alibaba微服务实战一 - 基础环境准备

SpringCloud alibaba实战系列文章汇总

SpringCloud Alibaba微服务实战三十 | 统一资源服务器配置模块

SpringCloud Alibaba微服务实战三十四 - 隐私接口禁止外部访问

Spring Cloud 微服务实战

SpringCloud微服务实战——第二章Springboot