Свойства приложения Spring Boot в диаграммах управления

#java #spring #azure #kubernetes

Вопрос:

У меня есть приложение для загрузки Spring, и теперь я создал для него диаграмму управления. Я использую конфигурационную карту из k8s для создания свойств этого приложения. Но когда я осматриваю модуль, я вижу ошибку ниже:

2021-05-31 09:39:31.815 ПРЕДУПРЕЖДЕНИЕ 1 — [ost-StartStop-1] o.s.b.a.orm.jpa.databaseLookup : Не удается определить URL-адрес jdbc из источника данных

org.springframework.jdbc.support.MetaDataAccessException: Не удалось получить соединение для извлечения метаданных; вложенное исключение-org.springframework.jdbc.CannotGetJdbcConnectionException: Не удалось получить соединение JDBC; вложенное исключение-org.postgresql.util.Исключение PSQLException: Попытка подключения не удалась.

Я написал свойства приложения в виде конфигурационной карты:

 kind: ConfigMap
apiVersion: v1
metadata:
  name: myconfigmap
data:
  application.properties: |-
    server.port = 8080
    spring.datasource.url={{ .Values.database.url }}
    spring.datasource.username={{ .Values.database.username }}
    spring.datasource.password={{ .Values.database.password }}
 

В развертывании.yaml я называю это использованием этого:

       envFrom:
        - configMapRef:
            name: myconfigmap
 

Я перезаписываю базу данных .Values…. с помощью keyvault из azure. Как лучше всего сделать этот файл доступным в моем кластере k8s?

У меня есть переменные, перезаписанные этой командой:

обновление руля —пространство имен имен —установить —установить «база данных.url=database_url,база данных.имя пользователя=имя пользователя,база данных.пароль=пароль» имя приложения

основной класс:

 @SpringBootApplication
@Configuration
@EnableScheduling
 

приложение общедоступного класса расширяет SpringBootServletInitializer {

 /**
 * Main method.
 *
 * @param args
 *            args passed to the Spring Boot App. Can be used to set the
 *            active profile.
 */
public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

/**
 * Configure method for enabling deployment in external tomcat.
 *
 * {@inheritDoc}
 */
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
}
 

}

Комментарии:

1. Не могли бы вы поделиться своим основным классом spring boot ?

2. Я обновил основной метод.

Ответ №1:

Вы не можете вводить файлы как env-var. Только простые записи ключ=значение.

Если вы хотите сохранить свою конфигурационную карту как есть, вам следует вместо этого смонтировать ее как том внутри вашего контейнера.

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

Application.properties теперь будет удален в каталог /config.

Spring загрузит смонтированный файл при запуске, следуя документации : https://docs.spring.io/spring-boot/docs/2.1.8.RELEASE/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files