#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