Приложение spring boot в kubernetes как использовать внешний файл message.properties для поддержки i18n и l10n?

У нас есть приложение для весенней загрузки, которое развернуто в Kubernetes. Мы добавляем возможности i18n в это приложение и хотим разместить файл messages.properties вне jar / war приложения. Я смог это сделать в весенней загрузке. Как это будет работать, когда я разверну его в Kubernetes? Мне нужно использовать карты конфигурации? Ниже приведен фрагмент кода.

@Configuration
public class AppConfig {
@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    //Path to the messages.properties files
    messageSource.setBasenames("file:/messages/messages", "classpath:messages");
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setCacheSeconds(60);
    return messageSource;
}
}
5
0
3 256
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Да, вы можете сделать это с помощью configmap. Это почти то же самое, что доступ к внешнему файлу application.properties. Сначала вы можете создать ConfigMap прямо из файла или создать ConfigMap, представляющий файл:

apiVersion: v1
kind: ConfigMap
metadata:
  name: treasurehunt-config
  namespace: default
data:
  application.properties: |
    treasurehunt.max.attempts=5

Затем в развертывании Kubernetes вы создаете Объем для ConfigMap и смонтируйте это в Pod в каталоге, который вы используете для внешней конфигурации:

          volumeMounts:
          - name: application-config
            mountPath: "/config"
            readOnly: true
      volumes:
      - name: application-config
        configMap:
          name: treasurehunt-config
          items:
          - key: application.properties
            path: application.properties

Эти фрагменты берутся из пример монтирования тома из ConfigMap для файла application.properties, поэтому они используют весеннюю загрузку путь к файлу внешних свойств по умолчанию/config. Вы можете использовать установите это в yaml для крепления, чтобы вы могли смонтировать файл, чтобы использовать тот же относительный путь, который вы уже используете при работе вне кубернетов.

Райан, если у меня есть messages.properties для 10 языков, должен ли я создать конфигурационную карту для всех из них? Например: один для messages.properties, один для messages_fr_FR.properties и так далее. А какие изменения нужно будет внести в код приложения? Как мое приложение поймет, что оно должно читать из файла configMap, или оно не зависит от этого? Я новичок в Kubernetes и не могу найти информацию об этом

Josh 26.10.2018 12:39

Вы можете включить несколько файлов в одну конфигурационную карту, и все они будут смонтированы в каталоге. Чтобы добавить больше файлов в приведенный выше пример, вы должны поместить их на тот же уровень отступа yaml, что и application.properties. Приложение может просто получить доступ к смонтированному каталогу, как и к любому другому каталогу. Не нужно знать, как каталог попал туда.

Ryan Dawson 26.10.2018 13:22

Spring-boot с радостью перехватывает файл application.properties в его текущем рабочем каталоге при запуске. Каков правильный путь mountPath или другое магическое заклинание K8S, чтобы добиться такого поведения - должен ли mountPath быть просто «/» вместо «/ config»?

chrisinmtown 13.06.2019 19:23

Согласно docs.spring.io/spring-boot/docs/current/reference/html/… это должно быть / config

Ryan Dawson 14.06.2019 11:43

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