spring cloud config的主函数是ConfigServerApplication

spring cloud config的主函数是ConfigServerApplication,其定义如下:

@Configuration
@EnableAutoConfiguration
@EnableConfigServer
public class ConfigServerApplication {

public static void main(String[] args) {
    new SpringApplicationBuilder(ConfigServerApplication.class)
            .properties("spring.config.name=configserver").run(args);
}

}
其中

@Configuration是spring定义的注解,使用注解,配置信息的载体由 XML 文件转移到了 Java 类中。

@EnableAutoConfiguration是spring boot定义的注解,控制spring applicationContext的自动配置的开关。

@EnableConfigServer是spring cloud定义的注解,

@EnableConfigServer定义如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({ ResourceRepositoryConfiguration.class, EnvironmentRepositoryConfiguration.class,
ConfigServerEncryptionConfiguration.class, ConfigServerMvcConfiguration.class })
public @interface EnableConfigServer {

}

  1. ResourceRepositoryConfiguration

定义如下:

@Configuration
@EnableConfigurationProperties(ConfigServerProperties.class)
@ConditionalOnMissingBean(ResourceRepository.class)
public class ResourceRepositoryConfiguration {

@Bean
@ConditionalOnBean(SearchPathLocator.class)
public ResourceRepository resourceRepository(SearchPathLocator service) {
    return new GenericResourceRepository(service);
}

}
返回ResourceRepository,其实现类为:GenericResourceRepository,内部服务为SearchPathLocator。实现方法为:

@Override
public synchronized Resource findOne(String application, String profile, String label,
        String path) {
    String[] locations = this.service.getLocations(application, profile, label).getLocations();
    try {
        for (int i = locations.length; i-- > 0;) {
            String location = locations[i];
            for (String local : getProfilePaths(profile, path)) {
                Resource file = this.resourceLoader.getResource(location)
                        .createRelative(local);
                if (file.exists() && file.isReadable()) {
                    return file;
                }
            }
        }
    }
    catch (IOException e) {
        throw new NoSuchResourceException(
                "Error : " + path + ". (" + e.getMessage() + ")");
    }
    throw new NoSuchResourceException("Not found: " + path);
}

SearchPathLocator定义了搜索资源路径的策略,其层次结构如下:

在这里插入图片描述

2.EnvironmentRepositoryConfiguration

内部定了四种环境的配置

2.1. NativeEnvironmentRepository

@Configuration
@Profile(“native”)
protected static class NativeRepositoryConfiguration {

    @Autowired
    private ConfigurableEnvironment environment;

    @Bean
    public NativeEnvironmentRepository environmentRepository() {
        return new NativeEnvironmentRepository(this.environment);
    }

}

2.2. MultipleJGitEnvironmentRepository

@Configuration
@ConditionalOnMissingBean(EnvironmentRepository.class)
protected static class GitRepositoryConfiguration {

    @Autowired
    private ConfigurableEnvironment environment;

    @Autowired
    private ConfigServerProperties server;

    @Bean
    public MultipleJGitEnvironmentRepository environmentRepository() {
        MultipleJGitEnvironmentRepository repository = new MultipleJGitEnvironmentRepository(this.environment);
        if (this.server.getDefaultLabel()!=null) {
            repository.setDefaultLabel(this.server.getDefaultLabel());
        }
        return repository;
    }
}

2.3.SvnKitEnvironmentRepository

@Configuration
@Profile("subversion")
protected static class SvnRepositoryConfiguration {
    @Autowired
    private ConfigurableEnvironment environment;

    @Autowired
    private ConfigServerProperties server;

    @Bean
    public SvnKitEnvironmentRepository environmentRepository() {
        SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(this.environment);
        if (this.server.getDefaultLabel()!=null) {
            repository.setDefaultLabel(this.server.getDefaultLabel());
        }
        return repository;
    }
}

2.4.VaultEnvironmentRepository

@Configuration
@Profile(“vault”)
protected static class VaultConfiguration {
@Bean
public EnvironmentRepository environmentRepository(HttpServletRequest request, EnvironmentWatch watch) {
return new VaultEnvironmentRepository(request, watch, new RestTemplate());
}
}
另外还有,ConfigServerHealthIndicator、ConsulEnvironmentWatch、EnvironmentWatch

3.ConfigServerEncryptionConfiguration

定义了EncryptionController

@Bean
public EncryptionController encryptionController() {
    EncryptionController controller = new EncryptionController(this.encryptor);
    controller.setDefaultApplicationName(this.properties.getDefaultApplicationName());
    controller.setDefaultProfile(this.properties.getDefaultProfile());
    return controller;
}

4.ConfigServerMvcConfiguration

定义了EnvironmentController和ResourceController

@Bean
public EnvironmentController environmentController() {
    EnvironmentController controller = new EnvironmentController(encrypted(), this.objectMapper);
    controller.setStripDocumentFromYaml(this.server.isStripDocumentFromYaml());
    return controller;
}

@Bean
@ConditionalOnBean(ResourceRepository.class)
public ResourceController resourceController(ResourceRepository repository) {
    ResourceController controller = new ResourceController(repository,
            encrypted());
    return controller;
}

支持的协议有三种:

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.mediaType("properties", MediaType.valueOf("text/plain"));
    configurer.mediaType("yml", MediaType.valueOf("text/yaml"));
    configurer.mediaType("yaml", MediaType.valueOf("text/yaml"));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值