0

Spring Cloud Config Server 用に複数の svn ベースの構成リポジトリを定義する際に問題が発生しています。3 つの構成リポジトリをセットアップしました。開発用、ユニット用、生産用の 1 つ。デフォルトを開発に設定しました(spring.cloud.config.server.svn.uri = development repo uriを設定することにより)。しかし、構成サーバーの REST エンドポイントに GET 要求を行うと、要求するプロファイルに関係なく、常に開発構成が取得されます。以下の例を参照してください...

元:

curl -i -X GET \
   -H "Content-Type:application/json" \
 'http://localhost:8888/my-service-accounts/unit' 

結果:

{
   "name":"my-service-accounts",
   "profiles":[
      "unit"
   ],
   "label":null,
   "version":"750",
   "propertySources":[
      {
         "name":"http://PATH_TO_MY_SVN_SERVER/config-repo-development/trunk/my-service-accounts.yml",
         "source":{
            "server.port":8080,
            "hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds":3000
         }
      }
   ]
}

しかし、私は期待していました...

{
   "name":"my-service-accounts",
   "profiles":[
      "unit"
   ],
   "label":null,
   "version":"750",
   "propertySources":[
      {
         "name":"http://PATH_TO_MY_SVN_SERVER/config-repo-unit/trunk/my-service-accounts.yml",
         "source":{
            "server.port":7777,
            "hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds":3000
         }
      }
   ]
} 
  • propertySources[0].name 値の違いに注意してください。この構成はユニット リポジトリから取得されることを期待していますが、まだ開発リポジトリから取得されています。

私の構成サーバー構成:

アプリケーション.yml

server:
  port: 8888
spring:
  profiles:
    include: subversion
  cloud:
    config:
      server:
        svn:
          username: configserver
          password: ************
          uri: http://PATH_TO_MY_SVN_SERVER/config-repo-development
          repos:
            development:
              pattern:  ["*/development"]
              uri: http://PATH_TO_MY_SVN_SERVER/config-repo-development
            unit:
              pattern: ["*/unit"] 
              uri: http://PATH_TO_MY_SVN_SERVER/config-repo-unit
            production:
              pattern:
                - '*/production'
              uri: http://PATH_TO_MY_SVN_SERVER/config-repo-production

      discovery:
        enabled: true
  application:
    name: my-server-config
  • 注:私のIDE(IntelliJ)は、spring.cloud.config.server.svn.repos.*.uriの構成プロパティを解決できないと警告しています...しかし、これはSpring Cloud Configのドキュメントが指定する方法を示していますリポジトリ パス。

build.gradle

buildscript {
  ext {
    springBootVersion = "1.3.3.RELEASE"
  }
  repositories {
    mavenCentral()
    maven {url "https://plugins.gradle.org/m2/"}
  }
  dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    classpath("io.spring.gradle:dependency-management-plugin:0.5.5.RELEASE")
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.1.1"
  }
}

apply plugin: "base"
apply plugin: "maven"
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'

jar {
    baseName = project.ext.projectName
    version = project.ext.projectVersion
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
  mavenLocal()
  mavenCentral()
  maven { url "https://repo.spring.io/snapshot" }
  maven { url "https://repo.spring.io/milestone" }
}

dependencyManagement {
  imports {
    mavenBom "org.springframework.cloud:spring-cloud-dependencies:Brixton.RC1" 
  }
}

dependencies {
  compile("org.springframework.cloud:spring-cloud-starter-config")
  compile("org.springframework.cloud:spring-cloud-config-server")
  compile("org.springframework.cloud:spring-cloud-starter-eureka")
  compile("org.tmatesoft.svnkit:svnkit")

  testCompile("org.springframework.boot:spring-boot-starter-test")
}

eclipse {
  classpath {
    containers.remove("org.eclipse.jdt.launching.JRE_CONTAINER")
    containers "org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"
  }
}

task wrapper(type: Wrapper) {
  gradleVersion = "2.12"
}
4

2 に答える 2

1

目的の機能を実現するために、svn config リポジトリのディレクトリ レイアウトを再編成し、より柔軟な「searchPaths」プロパティを使用することになりました。

新しい SVN リポジトリ レイアウト:

  • /svn/config/trunk/dev/サービス名.yml
  • /svn/config/trunk/prod/サービス名.yml
  • /svn/config/trunk/unit/サービス名.yml

基本的にこのアプローチでは、構成リポジトリ URI を定義してから、入力パスでパターン マッチングを実行して構成を検索するディレクトリを決定する searchPaths プロパティを定義します。

新しい application.yml

server:
  port: 8888
spring:
  profiles:
    include: subversion
  cloud:
    config:
      server:
        svn:
          username: configserver
          password: ************
          uri: http://PATH_TO_MY_SVN_SERVER/svn/config
          searchPaths: ["{profile}"]
      discovery:
        enabled: true
  application:
    name: my-server-config

HTTP エンドポイント経由で構成サーバーにアクセスします。

curl -i -X GET \
   -H "Content-Type:application/json" \
 'http://localhost:8888/my-service-name/unit'

デフォルトの構成サーバーは一致しているようです

svn_server/{application-name}/{pattern_defined_in_searchPaths}

私の場合は次のとおりです。

svn_server/{application-name}/{profile}
于 2016-06-07T14:35:53.827 に答える
0

わかりやすくするために。コードを確認したところ、複数の SVN リポジトリの実装がサポートされていないことがわかりました。GIT専用です。

AbstractScmEnvironmentRepositoryには、 JGitEnvironmentRepositorySvnKitEnvironmentRepositoryの2 つの実装があります。誰がこの JGitEnvironmentRepository を拡張したかを確認すると、MultipleJGitEnvironmentRepository と PatternMatchingJGitEnvironmentRepository の 2 つの実装があることがわかります。しかし、SVN リポジトリの Multi** 実装はありません。

于 2017-11-01T16:01:15.747 に答える