Spring Cloud Config 存储复杂数据结构

假设现在有这样一个接口:
GET /emojes

{
	"emojies": [{
		"id": "1",
		"name": "呵呵",
		"uri": "http://xxx.png"
	},
	{
		"id": "2",
		"name": "嘿嘿",
		"uri": "http://ooo.png"
	}]
}

里面的数据希望存储在配置中心,以便方便修改,动态刷新。spring cloud config支持yaml格式的配置文件。结合spring boot配置类,可以把相关配置注入到一个Java Bean中,供其他对象使用。

添加yaml文件

cat test-dev.yaml

im:
  emojis:
    - id: 1
      name: 呵呵
      uri: http://xxx1.png
    - id: 2
      name: 嘿嘿
      uri: http://ooo.png

添加配置类

EmojisConfig.java

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;

@Component
@ConfigurationProperties(prefix = "im")
@Data
public class EmojisConfig {
    private List<Emojis> emojis = new ArrayList<>();
}

Emojis.java

import lombok.Data;

@Data
public class Emojis {
    private String id;
    private String name;
    private String uri;
}

使用配置类

EmojisController.java

@RestController
@RequestMapping("/emojs")
@RefreshScope
public class EmojisController {

    @Autowired
    private EmojisConfig emojisConfig;

    @GetMapping
    public EmojisConfig doGet(){
        return emojisConfig;
    }
}

一定不要忘记添加@RefreshScope,修改配置后。POST /refresh使其动态生效。

每次修改yml文件后,先通过在线校验工具yaml-validator校验,以保证配置格式正确。

CONTENTS