页面加载中...

Springcloud使用git作为配置中心

| Spring Boot | 0 条评论 | 578浏览

参考:http://www.ityouknow.com/springcloud

首先,需要明确一个配置中心提供的核心功能应该有什么

  • 提供服务端和客户端支持
  • 集中管理各环境的配置文件
  • 配置文件修改之后,可以快速的生效
  • 可以进行版本管理
  • 支持大的并发查询
  • 支持各种语言

Spring Cloud Config可以完美的支持以上所有的需求。

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,本项目以git做为示例。

git配置中心

创建git仓库,存放配置文件

首先,在git中创建一个仓库,存放我们的配置文件,如下:创建了一个仓库叫做:spring-cloud-demo,建立一个文件夹:config-repo,存放两个配置文件:config-dev.properties,config-test.properties

比如,我们经常需要配置我们的数据源,我们配置了两个数据源,生产环境的配置保存在config-dev.properties中:

同样的,在测试环境的配置保存在config-test.properties中。

提供端

添加依赖:

在server端中添加依赖,(当然了,spring-boot的依赖也得要的)


    org.springframework.cloud
    spring-cloud-config-server
    1.4.4.RELEASE

本地配置

首先,添加如下配置:

eureka:
  client:
    service-url:
      defaultZone: http://localhost:9999/eureka/ #将服务注册到那个注册中心去
server:
  port: 7777
spring:
  application:
    name: demo-provider
  cloud:
    config:
      server:
        git:
          uri: https://github.com/aBreaking/spring-cloud-demo/  #github 仓库地址
          search-paths: config-repo #配置中心
          username: github账号
          password: github密码

启动类注解

在启动类中添加@EnableConfigServer注解

@SpringBootApplication
@EnableConfigServer
public class ProviderApplication {
public static void main(String[] args) {
    SpringApplication.run(ProviderApplication.class, args);
}

}

启动provider

直接在浏览器中输入:http://localhost:7777/config-test.properties或者http://localhost:7777/config-dev.properties

这里的地址为:ip:port/配置文件名。可看到如下:

或者,输入url:http://localhost:7777/config/test

你会看到如下:你的配置中心的信息

即配置中心搭建成功。

使用端

添加依赖

在client端中添加依赖:(当然了,spring-boot的依赖也得要的)


    org.springframework.cloud
    spring-cloud-starter-config
    1.4.4.RELEASE

本地配置

此时,有两种调用方式,一种是直接根据server端的地址(ip:port)来进行配置调用,第二种是server端作为provider注册到注册中心去。很明显,第二种方式的配置要优于第一种,因为server端的地址一旦改变的话,那么client端还得做配置的修改,很麻烦,此外,为了保证保证高可用,可以配置多个server端,如果某一台server挂掉,也不会有影响。

1、直接使用server端

添加一个配置文件:bootstrap.properties。spring初始化时会先加载该配置文件,加载顺序优于applicaiton.properties。添加内容如下:

spring.cloud.config.name=config
spring.cloud.config.profile=test
spring.cloud.config.uri=http://localhost:7777
spring.cloud.config.label=master

同样application.properties中也得有配置:

spring.application.name=demo-consumer
server.port=8888

2、从注册中心中获取

那么,首先,需要将server注册到注册中心去,正常的服务注册操作即可。可参考

https://blog.csdn.net/abreaking2012/article/details/81363718

server端注册到注册中心后,client端bootstrap.properties进行配置:

spring.cloud.config.name=config
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true 
spring.cloud.config.discovery.service-id=demo-provider #server端的应用名
eureka.client.service-url.defaultZone=http://localhost:9999/eureka/ #注册中心的地址

创建controller

接下来直接使用即可。创建一个controller,如下:

@RestController
public class ClientController {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;

@RequestMapping("/test")
public String test(){
   return "测试环境数据源连接信息:url:"+url+",username:"+username+",password:"+password;
}

}

启动项目

在浏览器中输入:http://localhost:8888/test,即可得到配置中心的配置信息:

动态刷新

一个问题

配置中心就这样能够搭建成功。那么一个问题来了:

我们修改一下配置文件,再push到远程仓库,这时,我们再次访问server端:http://localhost:7777/config-dev.properties,OK,你会发现,server端正常刷新了数据,即跟远程仓库的数据是同步的,没问题。这时,我们再访问下client端:http://localhost:8888/test,发现client端并没有动态刷新数据,还是老的数据。所以,我们还得需要为client端动态刷新。

添加依赖

只需要对client端进行操作即可,添加spring-boot-starter-actuator依赖。


    org.springframework.boot
    spring-boot-starter-actuator
    1.4.4.RELEASE

Controller添加注解

还得需要对client端具体的Controller添加@RefreshScope注解,使用该注解的类,会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。

@RestController
@RefreshScope       // 使用该注解的类,会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。
public class ClientController {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;

@RequestMapping("/ds")
public String ds(){
    return "测试环境数据源连接信息:url:"+url+",username:"+username+",password:"+password;
}</code></pre> 

refresh刷新

正常启动项目后,每次配置文件数据修改后,client要想同步,需要以post的方式访问url:http://localhost:8888/refresh这个地址,才能进行同步,如下:

这时,再次访问原client中的地址:http://localhost:8888/test。数据更新了。

后记

如果consumer启动出现如下异常:java.lang.IllegalArgumentException: Could not resolve placeholder 'jdbc.url' in value "${jdbc.url}"。

确保consumer项目中没有spring-cloud-config-server依赖

 

发表评论

最新评论

    来第一个评论吧!