Перейти к основному содержимому

Управление настройками сервиса бизнес-логики

Источники настроек сервиса бизнес-логики

Сервис бизнес-логики получает настройки из следующих источников с разными приоритетами:

Сервис может быть полностью сконфигурирован только одним способом. После старта сервиса можно управлять настройками этого сервиса из AdminTools.

Актуальное состояние настроек сервиса хранится в Spring-компоненте ru.platform.platformSettings.platformSettings.PlatformSettings.

Каждому источнику настроек соответствует один из следующих классов-загрузчиков:

  • FileSettingsUploader (наименьший приоритет);
  • EnvironmentUploader;
  • ExternalSettingsUploader (наивысший приоритет).

Значение, заданное через ExternalSettingsUploader, переопределяет значения из файлов .properties и переменных окружения (см. ru.platform.platformSettings.platformSettings.PlatformSettingsImplementation.getTypedValue).

Аннотация @ConditionalOnBean(PlatformSettingsService.class) обеспечивает возможность создания сервиса бизнес-логики после инициализации сервиса конфигураций Атомкод.

Создание и работа с параметрами сервиса

Параметры сервиса задаются через перечисления (тип enum). Следующий блок кода демонстрирует пример описания перечисления:

public enum ApiClientPlatformSettingsKey {
ISSUER ("identityConfiguration__identityServiceUrl"),
BASE_URL ("ConfigServer"),
CURRENT_CLIENT_ID ("PLATFORM_IDENTITY_CURRENT_CLIENT_ID");
}

Значение перечисления должно совпадать с именем переменной окружения.

Для каждого параметра создается объект ru.platform.platformSettings.model.PlatformSettingsDefinition. Следующий блок кода демонстрирует пример описания источника настроек:

@Component
public class ApiClientPlatformSettingsProvider extends BasePlatformSettingsProvider {

private static final List<PlatformSettingsDefinition> apiClientSettings = List.of(
new PlatformSettingsDefinition<>(ApiClientPlatformSettingsKey.BASE_URL.getValue(),
true,
"platform.core.api-client.nginx-url", String.class,
null, ServiceSettingType.STRING,
"ApiClient nginx URL", null, null),

new PlatformSettingsDefinition<>(ApiClientPlatformSettingsKey.ISSUER.getValue(),
true,
"platform.core.api-client.identity-issuer", String.class,
null, ServiceSettingType.STRING,
"ApiClient Identity service URL", null, null),

new PlatformSettingsDefinition<>(ApiClientPlatformSettingsKey.CURRENT_CLIENT_ID.getValue(),
true,
"platform.core.identity.current-client-id", String.class,
null, ServiceSettingType.STRING,
"ApiClient current client id", null, null)
);

public ApiClientPlatformSettingsProvider(PropertyValuesLoader propertyValuesLoader) {
super(propertyValuesLoader, apiClientSettings);
}
}

Метаданные параметра сервиса используются для решения следующих задач:

  • Имя параметра: хранение и получение значений из сервиса конфигураций Атомкод.
  • Флаг разрешения передачи значения параметра вовне: передача вовне списка текущих параметров. Реализовано в ru.platform.platformSettings.platformSettings.presentation.PlatformSettingsPresentation.
  • Имя параметра в файле .properties: связь с файлом .properties и обеспечение работы FileSettingsUploader.
  • Тип значения, например, String, Boolean, Long: хранение и получение значений из сервиса конфигураций Атомкод.
  • Значение по умолчанию: передача списка доступных настроек (defaultSettings) с описанием, указанием типа, значением по умолчанию. Реализовано в ru.platform.discovery.DiscoveryIntegrationService.
  • Описание параметра: передача списка доступных настроек (defaultSettings) с описанием, указанием типа, значением по умолчанию. Реализовано в ru.platform.discovery.DiscoveryIntegrationService.
  • Список допустимых значений параметра (необязательно): передача списка доступных настроек (defaultSettings) с описанием, указанием типа, значением по умолчанию. Реализовано в ru.platform.discovery.DiscoveryIntegrationService.
  • Регулярное выражение для допустимого значения параметра (необязательно): передача списка доступных настроек (defaultSettings) с описанием, указанием типа, значением по умолчанию. Реализовано в ru.platform.discovery.DiscoveryIntegrationService.