去中心化配置
单机配置:
application.properties
zk.host=${zktest}
config:
package com.cc.springbootconfig;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* Created by CarlosXiao on 2018/7/29.
*/
@Configuration
@Data
public class Config {
@Value("${zk.host}")
private String zkHost;
}
接口测试:
package com.cc.springbootconfig;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* Created by CarlosXiao on 2018/7/29.
*/
@RestController
public class ConfigController {
@Resource
private Config config;
@GetMapping("config")
public String index() {
return config.getZkHost();
}
}
去中心化配置:去中心化实现,只需要从zk中取出对应节点存储的数据放入map中,比如调用http接口调用zk配置数据
package com.cc.springbootconfig;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
@SpringBootApplication
public class SpringbootConfigApplication {
public static void main(String[] args) throws IOException {
// SpringApplication.run(SpringbootConfigApplication.class, args);
SpringApplication application = new SpringApplication(SpringbootConfigApplication.class);
Map<String , Object> configMap = new HashMap<>();
ObjectMapper objectMapper = new ObjectMapper();
Map<String, Object> configMap1 = objectMapper.readValue(new URL("http://192.168.13.55:8080/config/app1"), new TypeReference<Map<String, Object>>(){});
configMap.put("zktest", "192.168.13.51:2185");
//System.setProperty("zktest", "192.168.13.51:2185");
application.setDefaultProperties(configMap1);
application.run(args);
/**
* /config/app1 {"zktest":"192.168.13.51:2185", "jdbc.url":""}
* 1、需要一个单独的应用程序来管理配置。操作zk。
* 2、需要一个获取配置的接口
* 3、客户端程序获取配置注入到springboot defaultProperties
*
*
* springboot 项目通过 application.setDefaultProperties(configMap1);
* springmv 项目通过 PropertyPlaceholderConfigurer resolvePlaceholder
* 纯静态项目
*/
}
}
注意:watcher机制不用在项目启动,不然相当于重启,只需要在业务代码中监听到配置改变处理业务逻辑