带有svn作为存储库的spring-cloud-config-server的奇怪问题

时间:2019-07-15 12:17:37

标签: spring-cloud spring-cloud-netflix spring-cloud-config

我正在使用带有SVN作为存储库的spring-cloud-config-server。当我启动cloud-config-server和client [microservice]时,将正确获取配置值。

更改配置值和SVN提交后,我将触发刷新POST调用,URL:http://localhost:8080/actuator/refresh [8080是客户端端口]。 SVN中的更新值未刷新。

众所周知,配置服务器将SVN数据存储在本地。[在我的情况下,文件夹位置-/ tmp / config-repo-5393789580706388886] 这里的奇怪之处在于,SVN中已提交的更改已更新在本地,一旦触发“刷新” REST调用。但这只是应用程序没有将其接收。

Spring Boot版本-2.1.3。
云版本-格林威治发布。

配置服务器详细信息:

Maven依赖项:

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

<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
</dependency>

application.yml:

spring:
  application:
    name: spring-cloud-config-server
  profiles:
    active: subversion
  cloud:
    config:
      server:
         svn:
           uri: https://svn.*****.com/repos/****/microservices
           username: #####
           password: #####
         default-label: source
server:
  port: 8888

config-client [microservice]详细信息: Maven依赖项:

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

application.yml:

spring:
  application:
    name: [client-app-name]
  cloud:
    config:
      uri: http://localhost:8888
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
  security:
   enabled: false
server:
  port: 8080

在启动配置客户端微服务时,能够看到它正在通过配置服务器从预期的SVN位置获取值。

c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
c.c.c.ConfigServicePropertySourceLocator : Located environment: name=[client-app-name], profiles=[default], label=null, version=10718, state=null
b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://svn.*****.com/repos/****/microservices/source/[client-app-name].properties'}]}

当调用测试REST调用从config客户端获取配置值时,我从SVN获取值。

在文件[client-app-name] .properties中进行更改并提交到SVN之后。在进行REST调用http://localhost:8080/actuator/refresh时,按预期方式获得以下响应。

[]-bash-4.2$ curl -X POST http://localhost:9000/actuator/refresh
["config.client.version","configValue"]-bash-4.2$

同时,按预期从日志中获取以下消息。

c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
c.c.c.ConfigServicePropertySourceLocator : Located environment: name=[client-app-name], profiles=[default], label=null, version=10718, state=null
b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://svn.*****.com/repos/****/microservices/source/[client-app-name].properties'}]}

对config-client的REST调用,只需返回先前的配置值即可获取更新的配置。

如果我重新启动客户端,则它将获取更新的最新配置。另外,SVN更改会在本地更新[对于我来说,文件夹位置-/ tmp / config-repo-5393789580706388886]

我真的无法找出我犯的错误。解决这个问题的任何投入将非常有帮助。非常感谢。

1 个答案:

答案 0 :(得分:0)

您是否为组件设置了abstract class BaseActivity : AppCompatActivity() { lateinit var snackbar:Snackbar // call this method to show Snackbar in Activity fun showMessage(message: String?) { message?.let { snackbar = Snackbar.make( findViewById<View>(android.R.id.content), message, Snackbar.LENGTH_SHORT ) snackbar.show() } } fun checkConnection() : Boolean { val cm = applicationContext.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager val activeNetwork: NetworkInfo = cm.activeNetworkInfo return activeNetwork.isConnected } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { return when (keyCode) { KeyEvent.KEYCODE_HOME -> { true } KeyEvent.KEYCODE_APP_SWITCH -> { true } else -> { super.onKeyDown(keyCode, event) } } } } 注释?

例如,@RefreshScope是具有配置值的TestProperties

@ConfigurationProperites

如果您使用的是上面示例中的原始configValue,则必须对其进行注释。


@Bean
public TestComponent(TestProperties properties) {
    return new TestComponent(properties.getConfigValue());
}

如果按原样使用属性,则会刷新它。