为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Cloud Config初探

标签:
Java

Spring Cloud Config提供了分布式系统中配置功能的服务端与客户端支持。对于不同环境的应用程序它的服务端提供了一种中心化的配置管理方式。并且其不仅适用于Spring的应用程序,其它语言开发的程序同样能够使用(这点很重要)。

环境要求

  • 首先需要安装JDK1.8或以上版本

  • IDE可以选用Spring Tool Suite(STS)或者IntelliJ IDEA,本文选用STS作为例子

服务端

在文件菜单,点击新建Spring Starter Project。
https://img1.sycdn.imooc.com//5b8b933200013b5706870539.jpg

在输入工程名(这里是configuration-service)后选择下一步(Next),在依赖项中选中Config Server。
https://img1.sycdn.imooc.com//5b8b933a0001adbc05530740.jpg

之后,点击Finish,即可完成工程的创建。

接着,在ConfigurationServiceApplication类上添加@EnableConfigServer注解。

package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.config.server.EnableConfigServer;@EnableConfigServer@SpringBootApplicationpublic class ConfigurationServiceApplication {    public static void main(String[] args) {
        SpringApplication.run(ConfigurationServiceApplication.class, args);
    }
}

最后一步,在application.properties文件里配置可用的端口及用于保存服务端配置的仓库地址。

server.port=9555#spring.profiles.active=native#spring.cloud.config.server.native.searchLocations=file:///${USERPROFILE}/Desktop/configspring.cloud.config.server.git.uri=file:///${USERPROFILE}/Desktop/config

Spring Cloud Config中最常用的是git仓库,这种场景下通过对spring.cloud.config.server.git.uri指定具体路径即可达成配置目的。
当然也可以不用git仓库,比如使用单纯的文件管理。
这时就需要同时使用spring.profiles.active=nativespring.cloud.config.server.native.searchLocations={配置文件目录路径}这两条配置项。

做为例子,在file:///${USERPROFILE}/Desktop/config目录下建立了一个application.properties文件,里面加入一条配置message=Hello World!

启动这个应用,一个Spring Cloud Server便产生了。

测试下其是否正常工作,可以在浏览器中输入http://localhost:9555/application/dev地址查看。如果是类似下列的结果,说明是正常的。

{"name":"application","profiles":["dev"],"label":null,"version":"c0f022755482d4a98f66dc19c8c4e0af512dc4f2","state":null,"propertySources":[{"name":"file:///C:\\Users\\Ken/Desktop/config/application.properties","source":{"message":"Hello World!"}}]}

客户端

同样是选择新建Spring Starter Project。但这次在依赖项中选择Config Client。

https://img1.sycdn.imooc.com//5b8b934300014ef105530740.jpg

完成创建后,再在pom.xml中追加两个依赖。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId></dependency><dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId></dependency>

接着在ConfigurationClientApplication文件里加入一个Controller。

package com.example.demo;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.context.config.annotation.RefreshScope;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@SpringBootApplicationpublic class ConfigurationClientApplication {    public static void main(String[] args) {
        SpringApplication.run(ConfigurationClientApplication.class, args);
    }
}@RefreshScope@RestControllerclass MessageRestController {    @Value("${message:Hello default}")    private String message;    @RequestMapping("/message")    String getMessage() {        return this.message;
    }
}

如果此时没有运行Config Server而是单独运行Config Client的话,可以看到以下的结果:
https://img1.sycdn.imooc.com//5b8b934a0001a61b03330089.jpg

说明程序中获取的是代码里默认的配置项。

下面,开始打通与Config Server的连接。
在Config Client的application.properties文件配置应用程序启动端口server.port=9666
再在相同resources目录下新建一个bootstrap.propertiess文件,加入与Config Server关联配置。

spring.cloud.config.uri=http://localhost:9555

然后,先启动Config Server应用程序,再启动Config Client应用程序。
https://img1.sycdn.imooc.com//5b8b93510001436103080075.jpg

结果说明Config Client成功从Config Server获得配置内容。

接下来,尝试将配置仓库目录下application.properties文件内的配置项改成message=Hello World, Spring Cloud!

刷新http://localhost:9666/message页面。结果未做变化。这是因为默认场景下,Config Client只在启动时向Config Server获取一次配置。

先把message配置改回message=Hello World!
在Config Client的application.properties中添加management.endpoints.web.exposure.include=*配置。

重新启动Config Client。

再次将message配置改成message=Hello World, Spring Cloud!

然后在命令行中执行curl localhost:9666/actuator/refresh -d {} -H "Content-Type: application/json"更新配置。

刷新页面后可以看到预期的结果:
https://img1.sycdn.imooc.com//5b8b93590001932803060075.jpg

原文出处:https://www.cnblogs.com/kenwoo/p/9572700.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消