使用YAMl代替XML配置文件

YAML

在之前的实例中,我们使用了src/main/resources/application.properties对我们的项目做了个性化的配置,这种配置方式简单明了,也是我们经常使用的

但是应对复杂的商业需求下,多环境和编程化的配置无法得以满足

为此Spring Cloud为我们提供了YAML的配置方式丰富我们的功能和简化我们的开发同时也能简单明了的分辨配置内容。

什么是YAML

YAML是“YAML Ain’t Markup Language YAML不是一种标记语言”的外语缩写

但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。

编译器有YAML的插件

YAML有以下基本规则:

1、大小写敏感

2、使用缩进表示层级关系

3、禁止使用tab缩进,只能使用空格键

4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。

5、使用#表示注释

6、字符串可以不用引号标注

自定义参数

自定义参数可以让我们在配置文件中定义一些参数以供在程序中使用

在这里我们使用Spring注解的方式实现这个功能

首先创建一个实体类来保存一些我们的系统设置

/**
 * 系统配置相关
 * @author Administrator
 *
 */
@Component
public class Config {

	@Value(value = "${config.systemName}")
	private String systemName;

	public String getSystemName() {
		return systemName;
	}

	public void setSystemName(String systemName) {
		this.systemName = systemName;
	}
}

application.properties中自定义系统变量

如果需要中文字符需要自行转换成Unicode

config.systemName=\u0078\u0078\u006f\u006f\u77f3\u5316\u662f\u6211\u5bb6

使用注解自动注入

	@Autowired
	Config config;

参数引用

在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} 

随机数

有些特殊需求,我们不希望设置的属性值是一个固定值,比如服务器随机端口号,某些编号等,我们可以使用${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}

外部参入

优先级

如果在properties里配置了属性,会覆盖yaml里的属性设置。

在微服务架构中经常会使用自动运维部署工具,使用这些工具来启动我们的服务

我们的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=100

 

使用外部配置方式可以让我们在服务启动时改变像服务端口,数据库连接密码,自定义属性值等等

多环境配置

在实际开发中,我们的一套代码可能会被同时部署到开发、测试、生产等多个服务器中,每个环境中诸如数据库密码等这些个性化配置是避免不了的,虽然我们可以通过自动化运维部署的方式使用外部参数在服务启动时临时替换属性值,但这也意味着运维成本增高。

我们可以通过多套配置来避免对于不同环境修改不同的配置属性

命名规则为:

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


注意:主配置文件中的配置优先级没有spring.profiles.active= 指定的配置文件优先级高,主配置文件中的配置会被覆盖,同时我们在启动项目,动态传入的配置优先级最高

使用YAML完成多环境配置

方式一:单一yaml文件 配合多propertys文件

spring:

  profiles:

    active:

      - prod

方式二:单一yaml文件内配置所有变量

server:     

  port: 8881 

spring:

  profiles:

     active:

      - prod

 --- 

spring:     

  profiles: test 

server:     

  port: 8882 

dalao:

  name: mashibing

  yanzhi: 100

  desc: ${dalao.name}is a good teacher,\啊啊啊  bing bu shi yin wei ${dalao.name} de yan zhi = ${dalao.yanzhi} 

  

 ---

spring:

  profiles: dev 

server:     

  port: 8082

dalao:

  name: mashibing

  yanzhi: 100

  desc: ${dalao.name}is a good teacher,开发 bing bu shi yin wei ${dalao.name} de yan zhi = ${dalao.yanzhi} 

 ---

spring:

  profiles: prod 

server:     

  port: 8083

dalao:

  name: mashibing

  yanzhi: 100

  desc: ${dalao.name}is a good teacher,生产  bing bu shi yin wei ${dalao.name} de yan zhi = ${dalao.yanzhi}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值