Перезапуск HikariCP с помощью Spring Cloud Config

Недавно я настроил свое приложение на использование Spring Cloud Config с Github в качестве репозитория конфигурации.

  • Spring Boot - 2.1.1.RELEASE
  • Spring Cloud Dependencies - Greenwich.RC2

Мое приложение использует практически все из коробки. Я только что настроил базу данных в application.yml, и у меня есть автоконфигурации HikariCP, которые творит чудеса в фоновом режиме.

Я обновляю свои приложения, используя это задание, которое вызывает метод refresh() на RefreshEndpoint.

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.

Если я посмотрю на время этих журналов, то для повторной настройки HikariCP потребуется около 8 секунд.

На данный момент я не обнаружил никаких проблем в своем приложении, так как нагрузка на приложение сейчас не так велика, но вот пара вопросов, которые у меня есть.

  1. Does this restart of HikariCP cause issues with the load to the application is increased?

  2. If the restarting can cause issues, is there a way to not refresh the HikariCP?

Какую версию ты используешь?

spencergibb 16.01.2019 22:55

Можно попробовать установить spring.cloud.refresh.refreshables на пустой набор.

spencergibb 16.01.2019 22:57

@spencergibb Я обновил вопрос весенней версией. Я использую последние версии Spring Boot 2.1.1.RELEASE и Spring Cloud Depencies Greenwich.RC2.

divinedragon 17.01.2019 08:01

@spencergibb Вы можете указать мне документацию по этому поводу? Кажется, не нахожу задокументировано здесь

divinedragon 17.01.2019 08:17
0
4
1 753
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

HikariCP по умолчанию обновляется, потому что в него внесены изменения, запечатывающие конфигурацию после запуска пула.

Так что отключите это, установите spring.cloud.refresh.refreshable в пустой набор.

Вот пример настройки в yaml

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

где ConfigProperties - это класс, аннотированный @RefreshScope.

Было бы очень полезно, если бы вокруг была некоторая документация, чтобы узнать, как можно использовать это свойство.

divinedragon 21.01.2019 12:12

@spencergibb Имя свойства неверное, это spring.cloud.refresh.refreshable, а не refreshables. Я использовал ваше решение, и оно не сработало, пока не заметил, что, хотя поле называется refreshables, установщик называется setRefreshable. См. org.springframework.cloud.autoconfigure.RefreshAutoConfigura‌​tion

lukelazarovic 20.08.2019 12:17

это сработало для меня (spring-boot-2.2.7.РЕЛИЗ, spring-cloud-Hoxton.SR4)

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

Другие вопросы по теме