使用Spring云配置重新启动HikariCP

使用Spring云配置重新启动HikariCP,spring,spring-boot,spring-cloud,hikaricp,spring-cloud-config,Spring,Spring Boot,Spring Cloud,Hikaricp,Spring Cloud Config,我最近将我的应用程序配置为使用SpringCloudConfig和Github作为配置存储库 弹簧防尘套-2.1.1.1释放 Spring云依赖项-Greenwich.RC2 我的应用程序几乎使用了所有现成的东西。我刚刚在application.yml中配置了数据库,我的HikariCP自动配置在后台发挥了神奇的作用 我正在使用此作业刷新我的应用程序,该作业调用上的refresh()方法 一切似乎都很好,但每次刷新配置时,我都会看到以下日志。这些日志显示HikariCP池在每次刷新时都会关闭

我最近将我的应用程序配置为使用SpringCloudConfig和Github作为配置存储库

  • 弹簧防尘套-2.1.1.1释放
  • Spring云依赖项-Greenwich.RC2
我的应用程序几乎使用了所有现成的东西。我刚刚在
application.yml
中配置了数据库,我的HikariCP自动配置在后台发挥了神奇的作用

我正在使用此作业刷新我的应用程序,该作业调用上的
refresh()
方法

一切似乎都很好,但每次刷新配置时,我都会看到以下日志。这些日志显示HikariCP池在每次刷新时都会关闭和启动

2019-01-16 18:54:55.817  INFO 14 --- [taskScheduler-9] o.s.b.SpringApplication       : Started application in 0.155 seconds (JVM running for 144.646)
2019-01-16 18:54:55.828  INFO 14 --- [taskScheduler-9] c.z.h.HikariDataSource        : HikariPool-1555 - Shutdown initiated...
2019-01-16 18:54:55.828  INFO 14 --- [taskScheduler-9] c.z.h.HikariDataSource        : HikariPool-1555 - Shutdown completed.
2019-01-16 18:54:55.828  INFO 14 --- [taskScheduler-9] c.d.ConfigRefreshJob          : Refreshing Configurations - []
2019-01-16 18:55:03.094  INFO 14 --- [  XNIO-1 task-5] c.z.h.HikariDataSource        : HikariPool-1556 - Starting...
2019-01-16 18:55:03.123  INFO 14 --- [  XNIO-1 task-5] c.z.h.HikariDataSource        : HikariPool-1556 - Start completed.
如果我查看这些日志的时间,重新配置HikariCP大约需要8秒

到目前为止,我还没有在我的应用程序中发现任何问题,因为应用程序上的负载现在并没有那么大,但这里有几个问题

  • HikariCP的重新启动是否会导致应用程序负载增加的问题

  • 如果重新启动会导致问题,是否有办法不刷新HikariCP


  • HikariCP在默认情况下是可刷新的,因为对它所做的更改会在池启动后密封配置

    因此,禁用此选项,将
    spring.cloud.refresh.refreshable
    设置为空集

    下面是在yaml中配置的示例

    spring:
      cloud:
        refresh:
          refreshable:
          - com.example.app.config.ConfigProperties
    

    其中,
    ConfigProperties
    是用
    @RefreshScope

    注释的类,HikariCP在默认情况下是可刷新的,因为对它所做的更改会在池启动后密封配置

    因此,禁用此选项,将
    spring.cloud.refresh.refreshable
    设置为空集

    下面是在yaml中配置的示例

    spring:
      cloud:
        refresh:
          refreshable:
          - com.example.app.config.ConfigProperties
    
    其中,
    ConfigProperties
    是用
    @RefreshScope
    注释的类,这对我来说很有用(spring boot-2.2.7.RELEASE,spring cloud-Hoxton.SR4

    这对我很有用(spring boot-2.2.7.RELEASE,spring cloud-Hoxton.SR4


    您使用的是什么版本?您可以尝试将
    spring.cloud.refresh.refreshables
    设置为空集。@Spencergib我用spring版本更新了问题。我正在使用最新的
    springboot2.1.1.RELEASE
    springclouddepenciencesgreenwich.RC2
    @spencergib你能给我指一下这方面的文档吗?我似乎找不到您使用的是什么版本?您可以尝试将
    spring.cloud.refresh.refreshables
    设置为空集。@Spencergib我用spring版本更新了问题。我正在使用最新的
    springboot2.1.1.RELEASE
    springclouddepenciencesgreenwich.RC2
    @spencergib你能给我指一下这方面的文档吗?我似乎觉得如果有一些文档可以帮助您了解如何使用此属性。@Spencergib属性的名称是错误的,它是
    spring.cloud.refresh.refresh
    ,而不是
    refresh
    。我使用了您的解决方案,直到我注意到虽然字段名为
    refreshables
    ,但setter名为
    setRefreshable
    。请参阅
    org.springframework.cloud.autoconfigure.RefreshAutoConfiguration
    ,如果有一些文档可以了解如何使用此属性,这将非常有用。@Spencergib属性的名称是错误的,它是
    spring.cloud.refresh.refreshable
    ,而不是
    refreshables
    。我使用了您的解决方案,直到我注意到虽然字段名为
    refreshables
    ,但setter名为
    setRefreshable
    。请参见
    org.springframework.cloud.autoconfigure.RefreshAutoConfiguration
    spring.cloud.refresh.extra-refreshable=com.zaxxer.hikari.HikariDataSource