[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-kubernetes-kak-peredat-konfiguratsiyu-v-java-spring-boot-prilozhenie-cherez-configmap-i-secret":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},1318,"kak-peredat-konfiguratsiyu-v-java-spring-boot-prilozhenie-cherez-configmap-i-secret",26,"kubernetes","Kubernetes","☸️","Как передать конфигурацию в Java\u002FSpring Boot приложение через ConfigMap и Secret?","Spring Boot приложения гибко работают с конфигурацией из Kubernetes. Существует три основных подхода, различающихся по сложности и возможностям.\n\n### 1. Переменные окружения\n\nSpring Boot автоматически подхватывает переменные окружения. Переменная `SPRING_DATASOURCE_URL` маппится на свойство `spring.datasource.url`.\n\n\u003Cdetails>\n\u003Csummary>Пример Deployment с envFrom\u003C\u002Fsummary>\n\n```yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: spring-config\ndata:\n  SPRING_DATASOURCE_URL: \"jdbc:postgresql:\u002F\u002Fpostgres-service:5432\u002Fmydb\"\n  SPRING_JPA_HIBERNATE_DDL_AUTO: \"validate\"\n  SERVER_PORT: \"8080\"\n---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: spring-secret\ntype: Opaque\nstringData:\n  SPRING_DATASOURCE_USERNAME: \"postgres\"\n  SPRING_DATASOURCE_PASSWORD: \"secret123\"\n---\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: my-spring-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: my-spring-app\n  template:\n    metadata:\n      labels:\n        app: my-spring-app\n    spec:\n      containers:\n        - name: app\n          image: my-registry\u002Fmy-spring-app:1.0.0\n          ports:\n            - containerPort: 8080\n          envFrom:\n            - configMapRef:\n                name: spring-config\n            - secretRef:\n                name: spring-secret\n```\n\n\u003C\u002Fdetails>\n\n### 2. Монтирование application.yml как файл\n\nConfigMap содержит полный `application.yml`, который монтируется в контейнер и указывается через `SPRING_CONFIG_LOCATION`.\n\n\u003Cdetails>\n\u003Csummary>Пример с монтированием application.yml\u003C\u002Fsummary>\n\n```yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: spring-app-config\ndata:\n  application.yml: |\n    server:\n      port: 8080\n      shutdown: graceful\n    spring:\n      datasource:\n        url: jdbc:postgresql:\u002F\u002Fpostgres-service:5432\u002Fmydb\n        hikari:\n          maximum-pool-size: 10\n      jpa:\n        hibernate:\n          ddl-auto: validate\n    management:\n      endpoints:\n        web:\n          exposure:\n            include: health,info,prometheus\n---\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: my-spring-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: my-spring-app\n  template:\n    metadata:\n      labels:\n        app: my-spring-app\n    spec:\n      containers:\n        - name: app\n          image: my-registry\u002Fmy-spring-app:1.0.0\n          ports:\n            - containerPort: 8080\n          volumeMounts:\n            - name: config\n              mountPath: \u002Fapp\u002Fconfig\n              readOnly: true\n          env:\n            - name: SPRING_CONFIG_LOCATION\n              value: \"file:\u002Fapp\u002Fconfig\u002Fapplication.yml\"\n      volumes:\n        - name: config\n          configMap:\n            name: spring-app-config\n```\n\n\u003C\u002Fdetails>\n\n### 3. Spring Cloud Kubernetes\n\nБиблиотека Spring Cloud Kubernetes позволяет напрямую читать ConfigMap и Secret как PropertySource. При изменении ConfigMap приложение может автоматически перезагрузить конфигурацию без перезапуска Pod'а.\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>org.springframework.cloud\u003C\u002FgroupId>\n    \u003CartifactId>spring-cloud-starter-kubernetes-client-config\u003C\u002FartifactId>\n\u003C\u002Fdependency>\n```\n\n```yaml\n# bootstrap.yml\nspring:\n  cloud:\n    kubernetes:\n      config:\n        enabled: true\n        name: my-app-config\n      secrets:\n        enabled: true\n        name: my-app-secret\n      reload:\n        enabled: true\n        strategy: refresh\n```\n\n### Сравнение подходов\n\n| Подход | Простота | Hot reload | Когда использовать |\n|---|---|---|---|\n| Переменные окружения | Высокая | Нет (нужен рестарт Pod'а) | Простые случаи, секреты |\n| Монтирование файла | Средняя | Частично (ConfigMap обновляется, но Spring Boot нужно перечитать) | Сложная конфигурация |\n| Spring Cloud Kubernetes | Низкая | Да (автоматически) | Когда нужен hot reload без рестарта |\n\n> **На собеседовании:** достаточно описать подходы через env и volume mount. Spring Cloud Kubernetes — бонус. Частая ошибка — не знать, что Spring Boot автоматически маппит `SPRING_DATASOURCE_URL` на `spring.datasource.url`.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Как передать конфигурацию в Java\u002FSpring Boot приложение чере — Gymterview","Spring Boot приложения гибко работают с конфигурацией из Kubernetes. Существует три основных подхода, различающихся по сложности и возможностям.","Spring Boot приложения гибко работают с конфигурацией из Kubernetes. Существует три основных подхода, различающихся по с",[7,13],true]