springboot 外部配置<中篇> YAML文件代替属性文件

YAML是JSON格式的扩展集,是一种非常方便的用来定义属性的文件格式。当你的项目有SnakeYAML库时,Spring Boot将会自动支持它。

1、使用YAML文件

SpringFramework中有两个类可以加载YAML文件,YamlPropertiesFactoryBean 可以加载之为属性类Properties ,YamlMapFactoryBean 可以加载之为Map。

加载YAML文件

如下YAML文件

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

转化为属性文件为

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

YAML列表将会转化为带[index]字符串的Key,如

my:
   servers:
       - dev.bar.com
       - foo.bar.com

将被转换为

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

想要想Spring DataBinder工具(这里用的是@ConfigurationProperties注解)那样绑定对象到实体Bean中的List或Set属性上的话,你不需要为改属性提供setter或者初始化该属性,只需要如下就行

@ConfigurationProperties(prefix="my")
public class Config {

    private List<String> servers = new ArrayList<String>();

    public List<String> getServers() {
        return this.servers;
    }
}

2、暴露YAML文件至Spring Environment

通常用YamlPropertySourceLoader来将YAML文件作为属性资源文件暴露给Spring Environment。这能让你通过使用@Value注释+占位符语法来访问这些环境变量。

3、多重配置 YAML 文档。

你可以在单个文件夹里面配置多个重复的YAML 文档并通过spring.profiles的值来表明你想用哪一个,例如:

server:
    address: 192.168.1.100
---
spring:
    profiles: development
server:
    address: 127.0.0.1
---
spring:
    profiles: production
server:
    address: 192.168.1.120

在上面例子中,开发环境中的服务器地址将是127.0.0.1,生产环境的服务器地址则为192.168.1.100,如果spring的profiles为不可用状态,则为192.168.1.100。

在没有指定的情况下profiles通常是激活的。所以在这个文件中我们设一个仅仅对"default" profiles有效的security.user.password。

server:
  port: 8000
---
spring:
  profiles: default
security:
  user:
    password: weak

而在下面的例子中,密码总是被设置因为它没有被绑定到任何profiles,因此它会在所有其他的profiles里面也都被重置。

4、YAML缺点

YAML文件不能通过@PropertySource注解进行加载。

5、YAML列表的合并

从上面我们可以看到,YAML最终被转换成Properties。当通过profiles来覆盖一个list属性时候,程序将变成一个计数器往list添加数据。

例如,假设类MyPojo包含两个默认为null的属性name和discretion,让我们通过FooProperties类来对他们进行暴露。

@ConfigurationProperties("foo")
public class FooProperties {

    private final List<MyPojo> list = new ArrayList<>();

    public List<MyPojo> getList() {
        return this.list;
    }

}

想一下如下配置

foo:
  list:
    - name: my name
      description: my description
---
spring:
  profiles: dev
foo:
  list:
    - name: my another name

如果dev为激活状态,FooProperties.list只包含一个entry即上面定义的。如果dev为激活状态,也仅仅包含下面定义的entry。它并不会合并。

时间: 2024-11-02 23:27:55

springboot 外部配置<中篇> YAML文件代替属性文件的相关文章

springboot 外部配置&lt;上篇&gt;

SpringBoot允许在外部进行配置,让你在不同的环境中运行相同的代码.你可以通过属性文件.YAML文件.环境变量和命令行来进行外部配置.属性值可以直接通过@Value注入,并可以通过Spring的Environment抽象类 或者 绑定了@ConfigurationProperties的实体类访问. 1.配置随机值. RandomValuePropertySource在注入随机值时候非常有用(例如测试程序.加密程序中),它可以生成int.long.uuids和string等等. my.sec

8、Spring+Struts2+MyBaits(Spring注解+jdbc属性文件+log4j属性文件)

一.注解理论 使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>. 如:在base-package指明一个包 1 <context:component-scan base-package="cn.gacl.java"/> 表明cn.gacl.java包

springboot 入门三- 读取配置信息二(读取属性文件方式)

在上篇文章中简单介绍自带读取方式.springboot提供多种方式来读取 一.@ConfigurationProperties(value="my") 支持更灵活的绑定及元数据的支持,但不支持spEL 定义appConfig接收(需要set get方法) @Component@ConfigurationProperties(value = "my")public class AppConfig {    private String name;    private

微服务之springboot 自定义配置(一)Application.properties文件

配置的文件的格式 springboot可以识别两种格式的配置文件,分别是yml和properties 文件.我们可以将application.properties文件换成application.yml,这两个文件都可以被SpringBoot自动识别并加载,但是如果是自定义的配置文件,就最好还是使用properties格式的文件,因为SpringBoot中暂时还并未提供手动加载yml格式文件的功能(这里指注解方式). yml 配置文件 属性格式:配置的属性和属性值要有空格隔开.没有空格报:java

springboot 外部配置&lt;下篇&gt; 类型安全配置

使用@Value注解注入配置在一些情况下是很笨重的,尤其是在多重配置或者垂直数据的情况下.Spring提供可选的方法,有力地归类配置到bean当中,以便管理和校验配置. package com.example; import java.net.InetAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.springframework.boot.co

springboot学习总结(四)外部配置

Springboot允许使用properties文件.yaml文件或者命令行参数作为外部配置 (一)常规属性配置(基于properties.yaml文件) 请求http://localhost:8090/yml-value-test,返回结果如下: (二)命令行参数配置 当Springboot是基于jar包运行时,可以使用命令行来修改yaml或者properties里面的配置文件 一般按上面的逻辑,请求http://localhost:8090/yml-value-test.返回结果应该是vin

spring4学习:使用外部属性文件

在配置文件里配置Bean时,有时需要在Bean的配置里混入系统部署的细节信息(例如:文件路径,数据源配置信息等)而这些部署细节实际上需要和Bean配置相分离: spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将Bean配置的内容外移到属性文件中,可以在Bean配置文件里使用形式为${var}的变量,PropertyPlaceholderConfigurer从属性文件里加载属性,并使用这些属性来替换属性变量: S

Spring中属性文件properties的读取与使用

实际项目中,通常将一些可配置的定制信息放到属性文件中(如数据库连接信息,邮件发送配置信息等),便于统一配置管理.例中将需配置的属性信息放在属性文件/WEB-INF/configInfo.properties中. 其中部分配置信息(邮件发送相关): Java代码 #邮件发送的相关配置 email.host = smtp.163.com email.port = xxx email.username = xxx email.password = xxx email.sendFrom = xxx@16

java中.properties属性文件的使用案例源码

一.描述 java中的.properties属性文件的正确使用可以解决很多问题,比如一个登录界面要做一个记住用户登录过的用户名和密码并且放在本地方便用户登录. 二.操作步骤 1.  打开eclipse工程文件目录下的XX.properties文件,如果没有就创建一个 2. 以键-值对的方式记录用户最近登录过的用户名--密码,添加一个键值对 3. 移除一个键-值对 4. 保存这个属性文件 5. 获取属性文件的所有键 6. 获取指定键的属性值 二.源代码 //在工作主目录下(即eclipse项目目录