【问题标题】:How to use Spring Cloud Config with local GIT repo instead of GitHub?如何将 Spring Cloud Config 与本地 GIT 存储库而不是 GitHub 一起使用?
【发布时间】:2023-04-06 08:14:01
【问题描述】:

是否有人将 Spring Cloud Config 配置为使用本地 GIT 存储库而不是 GitHub?如果可以,您可以分享您的配置吗?

【问题讨论】:

    标签: spring-cloud


    【解决方案1】:

    Spring Cloud Config 服务器tests 执行此操作。

    uri 最终看起来像这样 file:./target/test-classes/config-repo/

    你可以在 bootstrap.properties 中做这样的事情

    spring.cloud.config.server.git.uri=file:/path/to/your/git/repo
    

    【讨论】:

    • 是否可以完全避免使用 git repos,并从本地属性文件中获取所有配置信息?
    • 三个后续问题:1)文件:路径是否以“/”结尾(它不在您的 .properties 文件中),以及 2)回购路径是否应该是 .git本地文件系统中的目录,或其父目录;即 file:/Users/foo/example/.git 或 /Users/foo/example/ 和 3) 我认为在某些情况下 Spring 只使用 bootstrap.properties,而不使用 bootstrap.yml——是这个吗这些情况?
    • 我认为斜线并不重要。它不应该指向 .git 目录。 bootstrap.properties 或 .yml 应该没关系
    • 我刚刚测试了 Steve Byrne 询问的文件路径说明。确认 file:/path/to/your/git/repofile:/path/to/your/git/repo/ 都可以工作,但 file:/path/to/your/git/repo/.git.
    【解决方案2】:

    从 spring-cloud-config-montior 2.0.0.RELEASE 开始,FileMonitorConfiguration 会丢弃本地 git 存储库路径上的监视更改,除非它们被解析为 FileSystemResource。不幸的是,如果本地 git repo 路径像 file:/path/to/your/git/repo/ 一样,ApplicationContext DefaultResourceResolver 返回 FileUrlResource 而不是 FileSystemResource。 我的解决方法是创建一个自定义的 ProtocolResolver,它是用于扩展 DefaultResourceLoader 的 SPI,如果本地 git repo 路径以“//”开头,则利用 FileSystemResourceLoader 返回 FileSystemResource。

    SpringApplication app = new SpringApplication(ConfigserviceApplication.class);
            app.addInitializers(new ApplicationContextInitializer<ConfigurableApplicationContext>() {
    
                @Override
                public void initialize(ConfigurableApplicationContext applicationContext) {
                    ProtocolResolver resolver = new ProtocolResolver() {
    
                        private FileSystemResourceLoader resourceLoader = new FileSystemResourceLoader();
    
                        @Override
                        public Resource resolve(String location, ResourceLoader resourceLoader) {
                            if(location != null && location.startsWith("//")) {
                                return this.resourceLoader.getResource(location);
                            }
                            return null;
                        }
                    };
                    applicationContext.addProtocolResolver(resolver);
                }
            });
            app.run(args);
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2016-09-09
      • 2020-07-23
      • 1970-01-01
      • 2019-12-07
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多