本文涉及到的项目:
  开源项目:http://git.oschina.net/zhou666/spring-cloud-7simple
  cloud-config-repo:配置文件存放的文件夹
  cloud-simple-service:一个使用mybatis的数据库应用
  分布式配置管理应该是分布式系统和微服务应用的第一步。想象一下如果你有几十个服务或应用需要配置,而且每个服务还分为开发、测试、生产等不同维度的配置,那工作量是相当大的,而且还容易出错。如果能把各个应用的配置信息集中管理起来,使用一套机制或系统来管理,那么将极大的提高系统开发的生产效率,同时也会提高系统开发环境和生产环境运行的一致性。

  在传统开发中我们往往需要自己开发“配置管理服务器”,你可以使用redis、ldap、zookeeper、db等来存放统一配置信息,然后开发一个管理界面来进行管理。传统的做法没什么问题,和spring cloud所提供的配置管理方案相比,是前者需要自己开发,而后者直接简单使用现成的组件即可。当然还有很重要的一点,spring 配置管理模块由于是spring boot核心来实现的,因此做了大量的工作,可以把一些启动参数进行外部配置,这在传统的方案中是很难办到的,因为涉及到要改写第三方组件的问题,难度很大。比如web应用的绑定端口,传统应用只能在tomcat配置文件里改,而spring cloud却可以放到远程,类似的还有数据库连接、安全框架配置等。
  要使用spring cloud分布式配置文件总体上分为3个大的步骤,你需要创建存放配置文件的仓库,然后创建一个配置文件服务器,该服务器将配置文件信息转化为rest接口数据,然后创建一个应用服务,该服务演示使用分布式配置文件信息。
  1)创建配置文件存放仓库
  Spring cloud使用git或svn存放配置文件,默认情况下使用git,因此你需要安装git私服或者直接使用互联网上的github或者git.oschina,这里推荐使用git.oschina。本文示例使用的是git.oschina,创建好git工程后,也是文章开头所提到的工程,在此工程再创建一个文件夹cloud-config-repo来存放配置文件。然后创建两个配置文件:
  cloud-config-dev.properties
  cloud-config-test.properties
  这两个文件分别对应开发环境和测试环境所需要的配置信息,配置信息如下:
  mysqldb.datasource.url=jdbc:mysql://10.0.12.170:3306/test?useUnicode=true&characterEncoding=utf-8
  mysqldb.datasource.username=csst
  mysqldb.datasource.password=csst
  logging.level.org.springframework.web:DEBUG
  配置信息提供了数据库连接参数等,这是因为后面的应用服务中使用到了数据库。
  2)创建spring cloud配置服务器
  配置文件仓库创建好了后,需要创建配置管理服务器,如前所述该服务器只是将配置文件转换为rest接口服务,不做其它用途。这个服务器的功能也是spring cloud提供的,所以我们只需要引入相关jar包,稍微设置一下即可。创建该服务应用,你需要创建一个空的maven工程:

  然后在这个工程中增加一个类,命名为:ConfigServerApplication,代码如下:
  @SpringBootApplication
  @EnableConfigServer
  public class ConfigServerApplication {
  public static void main(String[] args) {
  SpringApplication.run(ConfigServerApplication.class, args);
  }
  }
  可以看到,我们只需要用@EnableConfigServer激活该应用为配置文件服务器即可。如此以来该应用启动后会完成前面提到的功能,即:读取远程配置文件,转换为rest接口服务。
  当然,需要配置远程配置文件读取路径,在application.properties中:
  server.port=8888
  spring.cloud.config.server.git.uri=https://git.oschina.net/zhou666/spring-cloud-7simple.git
  spring.cloud.config.server.git.searchPaths=cloud-config-repo
  其中server.port是配置当前web应用绑定8888端口,git.uri指定配置文件所在的git工程路径,searchPaths表示将搜索该文件夹下的配置文件(我们的配置文件放在spring-cloud-7simple这个工程的cloud-config-repo文件夹下)。