详解使用spring cloud config来统一管理配置文件
当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现微服务中的所有系统的配置文件的统一管理,而且还可以实现当配置文件发生变化的时候,系统会自动更新获取新的配置。
其架构原理图大致如下:
我们将配置文件放入git或者svn等服务中,通过一个config server服务来获取git中的配置数据,而我们需要使用的到配置文件的config client系统可以通过config server来获取对应的配置。
下面我们通过一个示例来演示一下config是如何被各个微服务系统获取到的。
1.向git中上传示例配置文件
jdbc.driverclassname=com.mysql.jdbc.driver jdbc.url=jdbc:mysql://127.0.0.1:3306/taotao?useunicode=true&characterencoding=utf8&autoreconnect=true&allowmultiqueries=true jdbc.username=root jdbc.password=root
文件名分别为:
microservice-dev.properties microservice-production.properties microservice-test.properties
对应不同的三个环境。
该文件的命名规则是:{application}-{profile}.properties
2.搭建config server
2.1 添加依赖
<parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.5.4.release</version> </parent> <!-- 导入spring cloud的依赖管理 --> <dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>dalston.sr3</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-eureka-server</artifactid> <exclusions> <exclusion> <groupid>com.fasterxml.jackson.dataformat</groupid> <artifactid>jackson-dataformat-xml</artifactid> </exclusion> </exclusions> </dependency> </dependencies> </dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-server</artifactid> </dependency> <!-- 使用bus总线的方式通知所有的微服务配置文件需要刷新 --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-bus-amqp</artifactid> </dependency> </dependencies> <build> <finalname>${project.artifactid}</finalname> <plugins> <!-- 资源文件拷贝插件 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-resources-plugin</artifactid> <configuration> <encoding>utf-8</encoding> </configuration> </plugin> <!-- java编译插件 --> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build>
2.2 编写configapplication
@enablediscoveryclient @enableconfigserver //开启配置服务 @springbootapplication public class configapplication { public static void main(string[] args) { springapplication.run(configapplication.class, args); } }
2.3 编写yml配置文件
server: port: 6688 #服务端口 spring: application: name: microservice-config-server #指定服务名 cloud: config: server: git: #配置git仓库地址 uri: 具体的配置文件的git地址 #username: #password: rabbitmq: #rabbitmq相关的配置 host: 127.0.0.1 port: 5672 username: guest password: guest eureka: client: registerwitheureka: true #是否将自己注册到eureka服务中,默认为true fetchregistry: true #是否从eureka中获取注册信息,默认为true serviceurl: #eureka客户端与eureka服务端进行交互的地址 defaultzone: http://cloud:cloud@127.0.0.1:6868/eureka/ instance: prefer-ip-address: true #将自己的ip地址注册到eureka服务中 ipaddress: 127.0.0.1 management: security: enabled: false #是否开启actuator安全认证
这是我们启动该服务,访问该配置文件,访问路径示例如下(以该配置为例): 127.0.0.1:6688/microservice-dev.properties
访问路径的写法也有多种方式:
/{application}/{profile}/[label] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties 其中{label}是指分支,默认是master。
3. config client的搭建
3.1 添加依赖
<dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-config</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-bus-amqp</artifactid> </dependency>
3.2 添加yml配置文件
eureka: client: serviceurl: #eureka客户端与eureka服务端进行交互的地址 defaultzone: http://cloud:cloud@127.0.0.1:6868/eureka/ spring: cloud: config: name: microservice #对应的配置服务中的应用名称 profile: dev #对应配置服务中的{profile} label: master #对应的分支 discovery: enabled: true #启用发现服务功能 service-id: microservice-config-server #指定服务名称 spring: application: name: itcasst-microservice-config-server #指定服务名 cloud: config: server: git: #配置git仓库地址 uri: http://172.16.55.138:10080/zhangzhijun/itcast-config-server.git #username: zhangzhijun #password: 123456 rabbitmq: #rabbitmq相关的配置 host: 127.0.0.1 port: 5672 username: guest password: guest
注意,这里的yml配置文件是:bootstrap.yml,它和application.yml文件一样,会被spring boot加载,但是bootstrap.yml会优先加载。
3.3 在application.yml文件中添加配置
management: security: enabled: false #是否开启actuator安全认证
3.4 利用git的webhook实现实时更新通知
这个时候,我么通过@value的方式,就可以获取到对应的配置了。
@refreshscope @component//加入到spring容器 public class jdbcconfigbean { @value("${jdbc.url}") private string url; @value("${jdbc.username}") private string username; @value("${jdbc.password}") private string password; @value("${jdbc.driverclassname}") private string driverclassname; public string geturl() { return url; } public void seturl(string url) { this.url = url; } public string getusername() { return username; } public void setusername(string username) { this.username = username; } public string getpassword() { return password; } public void setpassword(string password) { this.password = password; } public string getdriverclassname() { return driverclassname; } public void setdriverclassname(string driverclassname) { this.driverclassname = driverclassname; } @override public string tostring() { return "jdbcconfigbean [url=" + url + ", username=" + username + ", password=" + password + ", driverclassname=" + driverclassname + "]"; } }
再次测试,我们发现当我们修改了git中的配置文件的内容之后,client系统中读取到的属性也是修改之后的了。
到此为止,其架构变成如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: java通过控制鼠标实现屏幕广播的方法
下一篇: java使用SFTP上传文件到资源服务器