娄底优秀网站建设,西安免费做网站机构,网站怎么做七牛云加速,北京市建设部网站随着线上项目变的日益庞大#xff0c;每个项目都散落着各种配置文件#xff0c;如果采用分布式的开发模式#xff0c;需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更#xff0c;都会引起一系列的更新和重启#xff0c;运维苦不堪言也容易出错。配置中心便…随着线上项目变的日益庞大每个项目都散落着各种配置文件如果采用分布式的开发模式需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更都会引起一系列的更新和重启运维苦不堪言也容易出错。配置中心便是解决此类问题的灵丹妙药。 市面上开源的配置中心有很多BAT每家都出过360的QConf、淘宝的diamond、百度的disconf都是解决这类问题。国外也有很多开源的配置中心Apache Commons Configuration、owner、cfg4j等等。这些开源的软件以及解决方案都很优秀但是我最钟爱的却是Spring Cloud Config因为它功能全面强大可以无缝的和spring体系相结合够方便够简单颜值高我喜欢。 Spring Cloud Config 在我们了解spring cloud config之前我可以想想一个配置中心提供的核心功能应该有什么 提供服务端和客户端支持集中管理各环境的配置文件配置文件修改之后可以快速的生效可以进行版本管理支持大的并发查询支持各种语言Spring Cloud Config可以完美的支持以上所有的需求。 Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分server提供配置文件的存储、以接口的形式将配置文件的内容提供出去client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件默认情况下使用git我们先以git为例做一套示例。 首先在github上面创建了一个文件夹config-repo用来存放配置文件为了模拟生产环境我们创建以下三个配置文件 // 开发环境
neo-config-dev.properties
// 测试环境
neo-config-test.properties
// 生产环境
neo-config-pro.properties 每个配置文件中都写一个属性neo.hello,属性值分别是 hello im dev/test/pro 。下面我们开始配置server端 server 端 1、添加依赖 1 dependencies
2 dependency
3 groupIdorg.springframework.cloud/groupId
4 artifactIdspring-cloud-config-server/artifactId
5 /dependency
6 /dependencies 只需要加入spring-cloud-config-server包引用既可。 2、配置文件 1 server:2 port: 80403 spring:4 application:5 name: spring-cloud-config-server6 cloud:7 config:8 server:9 git:
10 uri: https://github.com/ityouknow/spring-cloud-starter/ # 配置git仓库的地址
11 search-paths: config-repo # git仓库地址下的相对地址可以配置多个用,分割。
12 username: # git仓库的账号
13 password: # git仓库的密码 Spring Cloud Config也提供本地存储配置的方式。我们只需要设置属性spring.profiles.activenativeConfig Server会默认从应用的src/main/resource目录下检索配置文件。也可以通过spring.cloud.config.server.native.searchLocationsfile:E:/properties/属性来指定配置文件的位置。虽然Spring Cloud Config提供了这样的功能但是为了支持更好的管理内容和版本控制的功能还是推荐使用git的方式。 3、启动类 启动类添加EnableConfigServer激活对配置中心的支持 1 EnableConfigServer
2 SpringBootApplication
3 public class ConfigServerApplication {
4
5 public static void main(String[] args) {
6 SpringApplication.run(ConfigServerApplication.class, args);
7 }
8 } 到此server端相关配置已经完成 4、测试 首先我们先要测试server端是否可以读取到github上面的配置信息直接访问http://localhost:8001/neo-config/dev 返回信息如下 1 {2 name: neo-config, 3 profiles: [4 dev5 ], 6 label: null, 7 version: null, 8 state: null, 9 propertySources: [
10 {
11 name: https://github.com/ityouknow/spring-cloud-starter/config-repo/neo-config-dev.properties,
12 source: {
13 neo.hello: hello im dev
14 }
15 }
16 ]
17 } 上述的返回的信息包含了配置文件的位置、版本、配置文件的名称以及配置文件中的具体内容说明server端已经成功获取了git仓库的配置信息。 如果直接查看配置文件中的配置信息可访问http://localhost:8001/neo-config-dev.properties返回neo.hello: hello im dev 修改配置文件neo-config-dev.properties中配置信息为neo.hellohello im dev update,再次在浏览器访问http://localhost:8001/neo-config-dev.properties返回neo.hello: hello im dev update。说明server端会自动读取最新提交的内容 仓库中的配置文件会被转换成web接口访问可以参照以下的规则 /{application}/{profile}[/{label}]/{application}-{profile}.yml/{label}/{application}-{profile}.yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties以neo-config-dev.properties为例子它的application是neo-configprofile是dev。client会根据填写的参数来选择读取对应的配置。 client 端 主要展示如何在业务项目中去获取server端的配置信息 1、添加依赖 1 dependencies2 dependency3 groupIdorg.springframework.cloud/groupId4 artifactIdspring-cloud-starter-config/artifactId5 /dependency6 dependency7 groupIdorg.springframework.boot/groupId8 artifactIdspring-boot-starter-web/artifactId9 /dependency
10 dependency
11 groupIdorg.springframework.boot/groupId
12 artifactIdspring-boot-starter-test/artifactId
13 scopetest/scope
14 /dependency
15 /dependencies 引入spring-boot-starter-web包方便web测试 2、配置文件 需要配置两个配置文件application.properties和bootstrap.properties application.properties如下 spring.application.namespring-cloud-config-client
server.port8002 bootstrap.properties如下 spring.cloud.config.nameneo-config
spring.cloud.config.profiledev
spring.cloud.config.urihttp://localhost:8001/
spring.cloud.config.labelmaster spring.application.name对应{application}部分spring.cloud.config.profile对应{profile}部分spring.cloud.config.label对应git的分支。如果配置中心使用的是本地存储则该参数无用spring.cloud.config.uri配置中心的具体地址spring.cloud.config.discovery.service-id指定配置中心的service-id便于扩展为高可用配置集群。 特别注意上面这些与spring-cloud相关的属性必须配置在bootstrap.properties中config部分内容才能被正确加载。因为config的相关配置会先于application.properties而bootstrap.properties的加载也是先于application.properties。 3、启动类 启动类添加EnableConfigServer激活对配置中心的支持 1 SpringBootApplication
2 public class ConfigClientApplication {
3
4 public static void main(String[] args) {
5 SpringApplication.run(ConfigClientApplication.class, args);
6 }
7 } 启动类只需要SpringBootApplication注解就可以 4、web测试 使用Value注解来获取server端参数的值 1 RestController2 class HelloController {3 Value(${neo.hello})4 private String hello;5 6 RequestMapping(/hello)7 public String from() {8 return this.hello;9 }
10 } 启动项目后访问http://localhost:8002/hello返回hello im dev update说明已经正确的从server端获取到了参数。到此一个完整的服务端提供配置服务客户端获取配置参数的例子就完成了。 我们在进行一些小实验手动修改neo-config-dev.properties中配置信息为neo.hellohello im dev update1提交到github,再次在浏览器访问http://localhost:8002/hello返回neo.hello: hello im dev update说明获取的信息还是旧的参数这是为什么呢因为springboot项目只有在启动的时候才会获取配置文件的值修改github信息后client端并没有在次去获取所以导致这个问题。如何去解决这个问题呢留到下一章我们在介绍。 示例代码转载于:https://www.cnblogs.com/UniqueColor/p/7510481.html