【问题标题】:Spring Active profile setup for existing application现有应用程序的 Spring Active 配置文件设置
【发布时间】:2022-01-13 08:23:52
【问题描述】:

非常感谢任何帮助,我有几个使用默认配置文件在 aks 中运行的 spring boot 应用程序,我正在尝试使用 helm 从我的 deployment.yaml 更改配置文件


apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "helm-chart.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "helm-chart.name" . }}
    helm.sh/chart: {{ include "helm-chart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "helm-chart.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ include "helm-chart.name" . }}
        app.kubernetes.io/instance: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
             
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
          env:
          - name: SPRING_PROFILES_ACTIVE
            value: "dev"

我的结果是我的 pod 被置于 crashloopbackoff 状态

启动 ApplicationContext 时出错。要显示条件报告,请在启用“调试”的情况下重新运行您的应用程序。

2022-01-12 12:42:49.054 错误 1 ​​--- [main] o.s.b.d.LoggingFailureAnalysisReporter:


应用程序启动失败


说明:

配置为侦听端口 8207 的 Tomcat 连接器无法启动。该端口可能已在使用中,或者连接器可能配置错误。

我尝试删除应用程序的现有 pod 和服务并进行了新部署,但仍然遇到相同的错误..

尝试的方法:(在所有方法中创建docker文件,创建pod,pod中的应用程序设置为dev配置文件,但问题是它无法启动应用程序并出现上述错误,当我删除配置文件设置时,每件事都工作得很好,期望应用程序设置为默认配置文件)

  1. 在 docker 文件中:

选项a。 CMD ["java","-jar","/app.jar", "--spring.profiles.active=dev"] 选项 b。 CMD ["java","-jar","-Dspring.profiles.active=dev","/app.jar"]

  1. 如上所述在 deployment.yml 中进行了更改

ps:我在 src/main/resources 上的应用程序中没有属性文件,我只有 application-(env).yml 文件。

想法是首先设置配置文件,然后根据配置文件选择 application_(env).yml

helm 的输出


Release "app" has been upgraded. Happy Helming!
NAME: email-service
LAST DEPLOYED: Thu Jan 13 16:09:46 2022
NAMESPACE: default
STATUS: deployed
REVISION: 19
TEST SUITE: None
USER-SUPPLIED VALUES:
image:
  repository: 957123096554.dkr.ecr.eu-central-1.amazonaws.com/app
service:
  targetPort: 8207

COMPUTED VALUES:
image:
  pullPolicy: Always
  repository: 957123096554.dkr.ecr.eu-central-1.amazonaws.com/app-service
  tag: latest
replicaCount: 1
service:
  port: 80
  targetPort: 8207
  type: ClusterIP


感谢您的帮助,谢谢

【问题讨论】:

  • 您使用的是哪个 Kubernetes 版本?您将哪个基础图像用于您的图像?您是否尝试过一些解决方案,例如this one
  • 我使用 alpine docker 基础镜像,我的 k8s 版本是 Client Version: 1.21 Server Version: version.Info Major:"1", Minor:"19+"
  • 我的问题是我的 pod 与应用程序一起运行但使用默认配置文件没有问题,我遇到的问题是当我尝试添加默认配置文件时,我最终设置了配置文件在 pod 中,但它没有启动应用程序,说明“原因:java.net.BindException:地址不可用”.. 我不知道是什么问题。
  • 您不是在deployment.yaml 中指定,那个配置文件是test 吗?当它使用test 配置文件运行时(是吗?),tomcat 端口是否在配置中定义为 8214?
  • 抱歉更正了 deployment.yml 它是 dev profile 而不是 test 还添加了上面的 helm 调试输出。

标签: spring amazon-web-services spring-boot kubernetes


【解决方案1】:

首先,请检查应用程序正在使用什么配置文件,搜索这样的行(在日志中):

The following profiles are active: test

当我使用 Spring Boot v2.2.2.RELEASE 进行测试时,application_test.yml 文件没有被使用,它必须重命名为 application-test.yml,以便更好地突出差异:

application_test.yml # NOT working
application-test.yml # working as expected

我更喜欢的是(但它是 Spring Boot 特定的),你可以像这样使用 application.yml:

foo: 'foo default'
bar: 'bar default'

---
spring:
  profiles:
  - test
bar: 'bar test2'

为什么我更喜欢这个?因为您可以使用多个配置文件,例如profile1,profile2 并且它的行为与最后一次获胜一样,我的意思是它将用来自 profile2 的值覆盖来自 profile1 的值,因为它是按此顺序定义的......这同样不适用于 application-profileName.yml 方法.

【讨论】:

  • 抱歉更改了,它只是 application-(env).yml,接下来从 pod 日志中我看到它被提及为没有活动配置文件集,回退到默认配置文件:默认(这是用于应用程序其中进行了上述配置文件更改)但是对于设置配置文件进行上述更改的 pod,该 pod 处于 crashloopback 状态,因为它无法启动应用程序,但我看到配置文件设置为 dev,但由于它无法启动上述应用程序有问题的错误
  • @Dilu 那条错误消息The Tomcat connector configured to listen on port 8214 failed to start. 是来自 Spring Boot 还是来自 k8s?如果是后者,则在 Spring Boot 日志中会显示消息说明它在哪个端口上启动了 Tomcat。如果来自 Spring Boot 本身,则意味着该端口上已经运行了一些东西......
  • @betilsta ,日志来自 spring boot INFO 1 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer:Tomcat 使用端口初始化:8207 (http) 2022-01-13 17 :31:50.739 INFO 1 --- [main] o.apache.catalina.core.StandardService: 启动服务 [Tomcat] 2022-01-13 17:31:50.740 INFO 1 --- [main] org.apache.catalina .core.StandardEngine:启动 Servlet 引擎:[Apache Tomcat/9.0.36]无法启动 bean 'webServerStartStop';嵌套异常是 org.springframework.boot.web.server.WebServerException: Unable to start Embedded Tomcat server
  • 问题是当我更改它时,我们在应用程序 yml 上有一个硬编码的服务器,看起来没问题,特别感谢 Betlista,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2018-04-29
  • 2017-01-25
相关资源
最近更新 更多