当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud配置模式匹配不能与SVN一起工作

白星渊
2023-03-14

我在为Spring Cloud Config服务器定义多个基于svn的配置存储库时遇到了问题。我已经建立了三个配置库。一个用于开发,单位和生产。我已经将默认值设置为development(通过设置spring.cloud.config.server.svn.uri=development repo uri)。但是,每当我向配置服务器的RESTendpoint发出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值中的差异。我希望这个配置来自单元存储库,但它仍然来自开发存储库。
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文档说明了如何指定存储库路径。
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"
}

共有1个答案

王才
2023-03-14

最后,我重新组织了svn配置库的目录布局,并使用了更灵活的“SearchPaths”属性,以实现我想要的功能。

  • /svn/config/trunk/dev/service-name.yml
  • /svn/config/trunk/prod/service-name.yml
  • /svn/config/trunk/unit/service-name.yml

基本上,使用这种方法,您定义配置存储库URI,然后定义一个searchPaths属性,该属性在传入路径上进行模式匹配,以确定要搜索哪个目录进行配置。

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
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}
 类似资料:
  • 我使用Liferay MVC框架创建了一个简单的portlet,并为portlet设置添加了一个ConfigurationActionImpl类和Configuration.jsp。我已经使用标记来显示标签。 没有PACL就可以正常工作。 使用PACL时,它不会显示映射到属性文件中键的值。它显示的钥匙是完好无损的。与其他PACL错误一样,控制台中不会报告任何错误。 这两行是在我部署portlet时

  • 我试图使用SSL运行一个Jetty(v9)服务器(这样访问只能通过HTTPS进行)。使用普通HTTP时,一切都运行良好。然后我更改了我的launcher类,所以它看起来如下所示: 我还运行这个来生成一个密钥库文件: 正如我所说的,在我将新的SSL配置代码添加到服务器启动器类之前,一切都很好,但我不明白哪里出了问题。

  • 本文向大家介绍Elixir模式匹配功能,包括了Elixir模式匹配功能的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 最近,我为jaxb生成的元素做了一个自定义匹配器,遇到了这样的场景: 先决条件: 我有一个自定义Matcher,它扩展了BaseMatcher,覆盖了方法describeTo和DescribeMatch(当然还有matches…) 我使用的是assertThat(actualObject,而不是MyMatcherStaticRunMethod(expectedObject)) 当断言失败时,结果是

  • 我在angular 5中实现了一个模式,在.ts文件中使用以下代码进行密码验证。这样做的目的是支持至少八个字符,至少一个大写字母、一个小写字母、一位数字和一个特殊字符。请参阅:密码的Regex必须包含至少八个字符、至少一个数字以及大小写字母和特殊字符 我明白了,当我在密码文本框中输入一个字符串时,例如< code>Niladri1!然而,当我输入一个类似于< code>Nopasss123!!,它