configmap.yaml、deployment.yaml、configmap.yaml 和 application.properties 之间的区别

问题描述 投票:0回答:2

我想在我的 Spring 应用程序中为固定线程池定义线程数。我应该在哪里做呢?我对 yaml 和 application.properties 文件感到困惑。

spring kubernetes kubernetes-helm
2个回答
1
投票

Spring 有多种设置属性的方法。如果合适的话,您可以使用其中一种以上的机制。这里要记住的最重要的事情是

PROPERTY_NAME
环境变量为
property.name
属性提供值,并且环境变量会覆盖
application.yml
文件。

一些选项:

src/main/resources/application.properties
文件被编译到您的 jar 文件和容器映像中。它对于提供事物的默认值或为使用属性配置的 Spring 层提供配置很有用。不过,请避免将特定于环境的设置(例如主机名)放在这里;您不想为每个新的部署环境重建应用程序。

Kubernetes

deployment.yaml
文件可以提供环境变量,这些也可以提供 Spring 属性值

env:
  - name: PROPERTY_NAME  # for @Value("property.name")
    value: property value

如果您使用的是 Helm 部署工具,您也可以在此处使用其模板语言。这将使您在部署时实际提供一个值。

# templates/deployment.yaml
env:
  - name: OTHERSERVICE_URL  # @Value("other-service.url")
    value: {{ .Values.otherServiceUrl }}
# values.yaml

# otherServiceUrl provides the location of the other service.
otherServiceUrl: http://other-service
# at the command line
helm install my-service ./ \
  --set otherServiceUrl=http://other-service.other-namespace

您可以使用 Kubernetes ConfigMapsSecrets 来提供单独的配置。引用 ConfigMap 或 Secret 值的语法有点冗长

env:
  - name: SPRING_DATASOURCE_PASSWORD
    valueFrom:
      secretKeyRef:
        name: database
        key: password

如果您已经在使用 Helm,我不会尝试将单独的配置值放入 ConfigMap,因为它非常冗长,并且比模板渲染方法没有任何实际好处。如果没有,并且您发现自己经常

kubectl edit
配置值,并且它们在多个容器之间共享,那么 ConfigMap 可能是合理的。将凭证存储在 Secrets 而不是 ConfigMap 中通常被认为是一种很好的做法,尽管 Secrets 在实践中并不是那么秘密。

最后,可以在 ConfigMap 中提供完整的 Spring 配置。这在值键包含任意映射的情况下很有用;一个例子是为您的指标系统设置标签。在这种情况下,环境变量映射可能不起作用。这种方法读起来可能更清晰;设置很多,但每个应用程序只需一次;在 Helm 上下文中,您也可以在此处使用模板;但它不能引用 Secret 值。

# templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: spring-properties  # typically a little more boilerplate in a Helm chart
data:
  applicaton.yml: |
    management:
      metrics:
        tags:
          namespace: {{ .Release.Namespace}}  {{/*- Helm syntax */}}
# templates/deployment.yaml
volumes:
  - name: app-properties
    configMap:
      name: spring-properties
containers:
  - name: application
    volumeMounts:
      - name: app-properties
        mountPath: /app/properties
    env:
      - name: SPRING_CONFIG_ADDITIONALLOCATION
        value: file:///app/properties

1
投票

您应该在

application.properties file
中定义固定线程池的线程数。这是 Spring 应用程序的默认配置文件,也是推荐存储配置设置的位置。您可以使用属性
spring.task.execution.pool.core-size
指定固定线程池的线程数。

例如,如果您想定义一个包含 10 个线程的固定线程池,您可以将以下内容添加到您的 application.properties 文件中:

spring.task.execution.pool.core-size=10

根据Spring boot doc

YAML 文件无法使用 @PropertySource 或 @TestPropertySource 注释。因此,如果您需要加载 这样,您需要使用属性文件。

参考这个SO1SO2了解yaml和application.properties文件之间的区别。

© www.soinside.com 2019 - 2024. All rights reserved.