小编典典

HikariCP使用Spring Cloud Config重新启动

spring-boot

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

  • Spring Boot-2.1.1.RELEASE
  • Spring Cloud依赖关系-Greenwich.RC2

我的应用程序几乎使用了所有现成的东西。我刚刚在其中配置了数据库,application.yml并且我在后台执行了HikariCP自动配置。

我正在使用refresh()RefreshEndpoint上调用method的作业来刷新我的应用程序。

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?


阅读 899

收藏
2020-05-30

共1个答案

小编典典

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

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

这是在yaml中配置的示例

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

ConfigProperties用注释的类在哪里@RefreshScope

2020-05-30