使用Spring Cloud配置重新启动HikariCP



我最近配置了我的应用程序,将Spring Cloud Config与Github一起用作配置存储库。

  • 弹簧套-2.1.1.RELEASE
  • Spring Cloud依赖项-Greenwich.RC2

我的应用程序使用了几乎所有开箱即用的东西。我刚刚在application.yml中配置了数据库,HikariCP自动配置在后台发挥了神奇的作用。

我正在使用这个在RefreshEndpoint上调用refresh()方法的作业刷新我的应用程序。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.endpoint.RefreshEndpoint;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@EnableScheduling
@Component
public class ConfigRefreshJob {
private static final Logger LOG = LoggerFactory.getLogger(ConfigRefreshJob.class);
private static final int ONE_MINUTE = 60 * 1000;
private final RefreshEndpoint refreshEndpoint;
@Autowired
public ConfigRefreshJob(final RefreshEndpoint refreshEndpoint) {
this.refreshEndpoint = refreshEndpoint;
}
@Scheduled(fixedDelay = ONE_MINUTE)
public void refreshConfigs() {
LOG.info("Refreshing Configurations - {}", refreshEndpoint.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.

如果我查看这些日志的时间,大约需要8秒才能再次配置HikariCP。

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

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

  2. 如果重新启动会导致问题,有没有办法不刷新HikariCP?

HikariCP在默认情况下是可刷新的,因为对其进行的更改会在池启动后密封配置。

因此,禁用此功能,将spring.cloud.refresh.refreshable设置为空集。

以下是在yaml 中配置的示例

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

其中CCD_ 4是用CCD_ 5注释的类。

这对我有效(spring-boot-2.2.7.RELEASE,spring-cloud-Hoxton.SR4)

spring.cloud.refresh.extra-refreshable=com.zaxxer.hikari.HikariDataSource

最新更新