SpringBoot應用之配置中心

SpringBoot應用系列文章

隨着互聯網的興起,提高系統性能的方式,漸漸從垂直伸縮的方式變爲水平伸縮。集羣中不可避免地會有配置,本地配置就不可取了,一旦有改動就得一臺臺機器去改動,很是費勁。有個集中配置中心仍是很是有必要的,一旦有配置改動,自動下發配置到集羣的各個機器中。其中的實現方式有許多,好比經過mq觸發變動,好比經過rpc方式觸發。zookeeper就屬於後者,常常用來作集羣選舉,服務發現,配置中心。本文主要介紹瞭如何在SpringBoot中集成和使用zookeeper做爲配置中心。java

準備zk集羣

可使用standalone模式,或者單機+docker構建集羣git

建立工程

訪問start.spring.io
圖片描述github

配置application.properties

server.port=8080

配置bootstrap.yml

spring:
  application:
    name: demoapp
  cloud:
    zookeeper:
        enabled: true
        connectString: 192.168.99.100:2181,192.168.99.100:2182,192.168.99.100:2183
    config:
      # TODO: refactor spring-cloud-config to use refresh, etc.. with out config client
      enabled: false

建立zk屬性

zkCli.sh
create /config ""
create /config/demoapp ""
create /config/demoapp/msg helloworld
quit

使用

@Value("${msg:defaultMsg}")
String msg

  • 老是鏈接到localhost:2181(須要把spring cloud的配置遷移到bootstrap.yml)
  • zk變化了沒有更新(有待下一個版本完善)

解決zk自動更新

能夠採用archaius-zookeeper來實現zk配置的自動更新,不過前提是不支持使用@Value註解來獲取變量。不過這種方式對我來講是OK的,由於隨處@Value變量使得變量隨處飛,很差管理。spring

/**
 * https://github.com/Netflix/archaius/wiki/ZooKeeper-Dynamic-Configuration
 */
@Component
public class ArchaiusZkConfig {

    @Autowired
    CuratorFramework client;

    @Value("${spring.application.name}")
    String appName;

    @PostConstruct
    public void installZkConfig() throws Exception {
        String zkConfigRootPath = "/config/"+appName;
        ZooKeeperConfigurationSource zkConfigSource = new ZooKeeperConfigurationSource(client, zkConfigRootPath);
        zkConfigSource.start();
        DynamicWatchedConfiguration zkDynamicConfig = new DynamicWatchedConfiguration(zkConfigSource);
        ConfigurationManager.install(zkDynamicConfig);
    }

    public String getDynamicUpdate(){
        String myProperty = DynamicPropertyFactory.getInstance()
                .getStringProperty("msg", "<none>")
                .get();
        return myProperty;
    }
}

鳴謝

相關文章
相關標籤/搜索