SpringBoot應用系列文章
隨着互聯網的興起,提高系統性能的方式,漸漸從垂直伸縮的方式變爲水平伸縮。集羣中不可避免地會有配置,本地配置就不可取了,一旦有改動就得一臺臺機器去改動,很是費勁。有個集中配置中心仍是很是有必要的,一旦有配置改動,自動下發配置到集羣的各個機器中。其中的實現方式有許多,好比經過mq觸發變動,好比經過rpc方式觸發。zookeeper就屬於後者,常常用來作集羣選舉,服務發現,配置中心。本文主要介紹瞭如何在SpringBoot中集成和使用zookeeper做爲配置中心。java
可使用standalone模式,或者單機+docker構建集羣git
訪問start.spring.io
github
server.port=8080
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
zkCli.sh create /config "" create /config/demoapp "" create /config/demoapp/msg helloworld quit
@Value("${msg:defaultMsg}") String msg
須要把spring cloud的配置遷移到bootstrap.yml
)有待下一個版本完善
)能夠採用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; } }