「原创」java架构师Spring Cloud Properties、YAML 配置详解!
目录
Spring Cloud YAML 配置详解1
Properties详解2
自定义参数2
参数引用3
随机数4
外部参入4
多环境配置5
YAML6
YAML有以下基本规则:6
使用YAML完成多环境配置7
在之前的实例中,我们使用了src/main/resources/application.properties对我们的项目做了个性化的配置,这种配置方式简单明了,也是我们经常使用的
但是应对复杂的商业需求下,多环境和编程化的配置无法得以满足
为此Spring Cloud为我们提供了YAML的配置方式丰富我们的功能和简化我们的开发同时也能简单明了的分辨配置内容。
Properties详解
自定义参数
自定义参数可以让我们在配置文件中定义一些参数以供在程序中使用
在这里我们使用Spring注解的方式实现这个功能
首先创建一个实体类
@Component
public class Dalao {
@Value("${dalao.name}")
private String name;
@Value("${dalao.yanzhi}")
private String yanzhi;
…..getter setter省略
@Component 注解:
把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
修改application.propertie增加以下配置参数
dalao.name=mashibing
dalao.yanzhi=100
使用自定义参数
Spring 管理对象
让Spring 注入对象,这里需要注意的是如果自己new的对象是没有被Spring容器管理的,所以不会自动注入属性值给我们
@Autowired
private Dalao dalao;
测试打印
System.out.println(ToStringBuilder.reflectionToString(dalao));
System.out.println(ToStringBuilder.reflectionToString(new Dalao()));
ToStringBuilder
这里用到了ToStringBuilder完成对象转字符串,要使用这个对象的话需要引入Spring的工具包commons-lang3
Pom
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
参数引用
在application.propertie中的各个参数值是可以相互引用的
我们修改一下之前的配置
dalao.name=mashibing
dalao.yanzhi=100
dalao.desc=${dalao.name}is a good teacher,bing bu shi yin wei ${dalao.name} de yan zhi = ${dalao.yanzhi}
实体中添加
@Value("${dalao.desc}")
private String desc;
输出结果
随机数
有些特殊需求,我们不希望设置的属性值是一个固定值,比如服务器随机端口号,某些编号等,我们可以使用${radom}在配置中产生随机int,long或是string
${random.int()} = 随机int
${random.long} = 随机long
${random.int(50)} = 50以内的随机数
${random.int(50,100)} = 50~100之间的int随机数
${random.value}= 随机字符串
配置文件中使用
dalao.xiaodi.zhangyang.yanzhi=${random.int(50,100)}
dalao.xiaodi.zhangyang.xinqing=${random.value}
外部参入
在微服务架构中经常会使用自动运维部署工具,使用这些工具来启动我们的服务
我们的Spring boot程序通常是使用java –jar的方式来启动运行的
对于服务端口号或是一些其他需要在启动服务的时候才能决定的值,如果在配置中写死或是用随机明显是满足不了需求的
我们可以使用外部参数替换自定义的参数
比如临时决定服务端口:
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=60
颜值同时发生变化:
java -jar demo-0.0.1-SNAPSHOT.jar --server.port=60 --dalao.xiaodi.zhangyang.yanzhi
使用外部配置方式可以让我们在服务启动时改变像服务端口,数据库连接密码,自定义属性值等等
多环境配置
在实际开发中,我们的一套代码可能会被同时部署到开发、测试、生产等多个服务器中,每个环境中诸如数据库密码等这些个性化配置是避免不了的,虽然我们可以通过自动化运维部署的方式使用外部参数在服务启动时临时替换属性值,但这也意味着运维成本增高。
我们可以通过多套配置来避免对于不同环境修改不同的配置属性
使用方式:
首先创建多套配置文件
命名规则为:
Application-*,properties
Application-dev,properties = 开发环境
Application-test,properties= 测试环境
Application-prod,properties=生成环境
接下来我们在 application.properties中设置哪套配置生效的开关
使用 spring.profiles.active=dev
在使用java –jar的方式启动服务的时候我们就可以通过外部参数改变整套配置了
java -jar demo-0.0.1-SNAPSHOT.jar -- spring.profiles.active=test
YAML
YAML是“YAML Ain't Markup Language YAML不是一种标记语言”的外语缩写
但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。
YAML有以下基本规则:
1、大小写敏感
2、使用缩进表示层级关系
3、禁止使用tab缩进,只能使用空格键
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
5、使用#表示注释
6、字符串可以不用引号标注
使用YAML完成多环境配置
方式一:
单一yml文件 配合多propertys文件
方式二:
单一yml文件内配置所有变量
【这是我们老师课堂上的随堂笔记,有兴趣的可以点链接看看,也可关注我,随时获得学习动态!
】