spring cloud config的运用与原理

spring cloud config 应用场景

作为一个开发而言,知道每个项目都有其需要维护的配置文件,如果项目量小而言,以人力尚可以接受。项目量一但增多,传统的维护方式就变的困难,所以需要一个统一的配置中心来维护所有服务的配置文件。再言,传统的项目配置文件配置数据发生改变,需要重启服务使其生效,spring cloud config 可以不需要进行重启对应的服务。

多样化仓库

spring cloud config 支持配置文件库除了大家所知的git,svn外,spring cloud config还支持valut,credhub,composite以及本地文件仓库。当你在配置服务中需要可以对配置中心的仓库进行显示配置,不对其配置的话默认仓库是git。

实例搭建

接下来给大家介绍一些spring cloud config 的实例搭建。当前笔者使用的spring boot版本为2.1.3.RELEASE, spring cloud 版本为Greenwich.SR1,与目前多数文章使用的spring boot1.x版本还是有些许不同的。

config-server 模块的构建

pom引入的依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

只需引入web和config-server的依赖就可以,如果是通过idea进行搭建的话,可以通过spring initializr ,勾选web ,以及spring cloud config 模块自动导入pom依赖
ideal 构建spring cloud config server模块

application.properties其中字段的配置

# 服务名称
spring.application.name=config-server
# 启动端口
server.port=7001
# 仓库地址,HTTP方式
spring.cloud.config.server.git.uri=***
# 仓库搜索路径
spring.cloud.config.server.git.search-paths=***
# 访问仓库的用户名
spring.cloud.config.server.git.username=****
# 访问仓库的密码
spring.cloud.config.server.git.password=***

大部分配置大家都熟悉,主要介绍几个重要配置,一个是spring.cloud.config.server.git.uri,这个指定了你的git仓库地址,属于必填值,不填的话或者地址错误的话启动失败会报错。username, password根据你的git仓库而言,如果是公共仓库不需要用户及密码不填也可以。其他不填的话也会报错。spring cloud config 除了支持username, password 认证外,也可以通过公私钥文件进行git认证。

spring.cloud.config.server.git.ignore-local-ssh-settings=true
spring.cloud.config.server.git.host-key=someHostKey
spring.cloud.config.server.git.host-key-algorithm=ssh-rsa
spring.cloud.config.server.git.private-key=***

使用私钥来代替用户名密码的安全验证,配置案例由官网提供的,不过大部分开发更优先于使用用户名密码配置。

启动类注解

启动一个spring cloud config server端项目只需要加入一个@EnableConfigServer注解就可以了


@EnableConfigServer
@SpringBootApplication
public class SpringCloudConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudConfigServerApplication.class, args);
    }

}

接下来研究一下@EnableConfigServer这个注解做了什么操作

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({ConfigServerConfiguration.class})
public @interface EnableConfigServer {
}

进入到这个EnableConfigServer类,发现引入了ConfigServerConfiguration类。

@Configuration
public class ConfigServerConfiguration {
    public ConfigServerConfiguration() {
    }

    @Bean
    public ConfigServerConfiguration.Marker enableConfigServerMarker() {
        return new ConfigServerConfiguration.Marker();
    }

    class Marker {
        Marker() {
        }
    }
}

进入ConfigServerConfiguration类,发现创建了一个内部类Marker,并将其注解成一个bean注入到spring容器。

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.config.server.config.ConfigServerConfiguration.Marker;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@ConditionalOnBean({Marker.class})
@EnableConfigurationProperties({ConfigServerProperties.class})
@Import({EnvironmentRepositoryConfiguration.class, CompositeConfiguration.class, ResourceRepositoryConfiguration.class, ConfigServerEncryptionConfiguration.class, ConfigServerMvcConfiguration.class})
public class ConfigServerAutoConfiguration {
    public ConfigServerAutoConfiguration() {
    }
}

在ConfigServerAutoConfiguration类里发现maker这个bean被注入进来,并引进了更多文件,简单的介绍一下各类的作用。

  • EnvironmentRepositoryConfiguration: 环境变量存储相关的配置类
  • CompositeConfiguration:组合方式的环境仓库配置类
  • ResourceRepositoryConfiguration:资源仓库相关的配置类
  • ConfigServerEncryptionConfiguration:加密断点相关的配置类
  • ConfigServerMvcConfiguration:对外暴露的MVC端点控制器的配置类

现在主要研究一下EnvironmentRepositoryConfiguration这个类,官方文档中也标明Environment相关为核心类。

@Configuration
@EnableConfigurationProperties({SvnKitEnvironmentProperties.class, CredhubEnvironmentProperties.class, JdbcEnvironmentProperties.class, NativeEnvironmentProperties.class, VaultEnvironmentProperties.class})
@Import({CompositeRepositoryConfiguration.class, JdbcRepositoryConfiguration.class, VaultRepositoryConfiguration.class, CredhubConfiguration.class, CredhubRepositoryConfiguration.class, SvnRepositoryConfiguration.class, NativeRepositoryConfiguration.class, GitRepositoryConfiguration.class, DefaultRepositoryConfiguration.class})
public class EnvironmentRepositoryConfiguration {
    public EnvironmentRepositoryC
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值