微信公众号:glmapper工作室
掘金专栏:glmapper
微 博:疯狂的石头_henu
欢迎关注,一起学习分享技术
类别 | 值 |
---|---|
JDK |
1.8.0_162 |
SOFABoot/SpringBoot |
3.0.0/2.0.x.RELEASE |
SpringCloud |
Finchley.RC1 |
IDE |
IDEA |
这里我是把 zk 和 zkui 部署在一台 linux 服务器上的。
从 ZooKeeper官网 下载 zookeeper-3.4.13.tar.gz。
sudo tar -zxvf zookeeper-3.4.13.tar.gz
sudo mv zookeeper-3.4.13 zookeeper
> cd zookeeper
> mkdir data
vim zoo.cfg
dataDir=/${your path}/zookeeper/data
zkServer.sh start
下载zkui代码,然后本地安装:
$ git clone https://gitee.com/ilanni/zkui.git
$ cd zkui/
$ mvn clean install # 进行maven打包,执行成功后会生成target文件夹,其中有jar文件。
执行结束后在zkui文件夹下生成一个target文件夹。
cp config.cfg target/
target文件夹中有两个jar包,我们只需要启动zkui-2.0-SNAPSHOT-jar-with-dependencies.jar
就可以了。
> cd target
> vim config.cfg
按需修改serverPort、zkServer、userSet 等。
java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar
# nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar & #退出窗口不退出进程
既然是以 zk 作为配置中,那么就需要将测试用的配置数据先在zk上进行初始化。有两种方式(均基于zkui):
/config/sofa/sofa-config-zk,dev=server.port=8085
设置当前应用启动的端口,这里的 root 为 /config/sofa,应用名是 sofa-config-zk,dev是环境 ,server.port=8085 是具体的配置kv。
新建一个 SOFABoot 工程,项目为 sofa-config-zookeeper。
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-zookeeper-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
spring:
application:
name: sofa-config-zk
profiles:
active: dev
cloud:
zookeeper:
enabled: true # true:开启zookeeper外部化配置, false:读取本地配置;
connect-string: sofa.cloud.alipay.net:2181
config:
root: /config/sofa #指定zookeeper中属性的根目录
enabled: true
watcher:
enabled: true #默认值是true, 监控配置变更后是否自动更新,需配合Spring Boot Actuators 使用
@SpringBootApplication
public class SofaConfigZookeeperApplication {
public static void main(String[] args) {
SpringApplication.run(SofaConfigZookeeperApplication.class,args);
}
}
没有任何特殊,不需要加额外的注解。
其实这里可以完全不用通过rest来打印这个属性值,但是为了方便看,还是写一下:
@RestController
public class ZookeeperConfigController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/config")
public String getConfig(){
return serverPort;
}
}
启动应用,如果成功的话,会有如下的日志:State change: CONNECTED
tomcat 启动端口:
因为在上面配置文件部分是没有指定 server.port 的,通常情况下默认是 8080 ,所以可以确定,已经拿到了配置中心的数据了。
这里还是需要依赖 actuator 的 /refresh 。上面依赖中已经加入了 actuator的相关依赖,所以只需要在资源类上加一个 @RefreshScope 注解即可。
需要注意,这里因为我们启动时应用时拿到的配置是8085,所以当前服务对外提供服务暴露的端口就是8085 ,当我们修改了zk上的值之后,他会改变 当前运行环境中 Enviroment 的值,但是不会使得服务的端口发生变化,除非重启。