4.2. 指定运行时配置选项


您可以为 Camel K 集成指定在运行时配置信息,以便在其运行时配置信息:

  • 您在命令行或 .properties 文件中提供的运行时属性。
  • 集成启动时,您希望 Camel K 操作器处理并解析为运行时属性的配置值。您可以在本地文本文件、OpenShift ConfigMap 或 OpenShift secret 中提供配置值。
  • 集成启动时没有解析为属性文件的资源信息。您可以在本地文本文件、二进制文件、OpenShift ConfigMap 或 OpenShift secret 中提供资源信息。

使用以下 kamel 运行 选项:

  • --property

    使用 --property 选项可直接在命令行中指定运行时属性,或者引用 Java Swarm properties 文件。Camel K operator 将属性文件的内容附加到正在运行的集成的 user.properties 文件中。

  • --config

    使用 --config 选项提供您希望 Camel K 操作器在集成启动时作为运行时属性的配置值。

    您可以提供本地文本文件(1 MiB 最大文件大小)、ConfigMap (3MB)或 Secret (3MB)。该文件必须是 UTF-8 资源。产品化文件(在集成启动时从您提供的文件生成)位于类路径级别上,以便您可以在集成代码中引用该文件,而无需提供准确的位置。

    注: 如果您需要提供非 UTF-8 资源(如二进制文件),请使用 --resource 选项。

  • --resource

    使用 --resource 选项为集成提供资源,以便在其运行时访问。您可以提供本地文本或二进制文件(1 MiB 最大文件大小)、ConfigMap (最大 3MB)或 Secret (最大 3MB)。另外,您可以指定为资源提供的文件的目标。例如,如果要设置 HTTPS 连接,请使用 --resource 选项提供指定位置中预期的 SSL 证书(二进制文件)。

    Camel K operator 不会解析属性的资源,且不会将资源添加到 classpath 中。(如果您想要将资源添加到 classpath 中,您可以在集成中使用 JVM 特征)。

4.2.1. 提供运行时属性

您可以直接在命令行中指定运行时属性,或使用 kamel run 命令的 --property 选项引用 Java Swarm properties 文件。

当您运行与 --property 选项的集成时,Camel K operator 会将属性附加到正在运行的集成的 user.properties 文件中。

4.2.1.1. 在命令行中提供运行时属性

您可以在运行时在命令行中配置 Camel K 集成的属性。当使用属性占位符(如 {{my.message}} )在集成中定义属性时,您可以在命令行中指定属性值,如 --property my.message=Hello。您可以在单个命令中指定多个属性。

流程

  1. 开发使用属性的 Camel 集成。以下简单示例包含 {{my.message}} 属性占位符:

    ...
    - from:
       uri: "timer:tick"
       steps:
         - set-body:
             constant: "{{my.message}}"
         - to: "log:info"
    ...
  2. 使用以下语法运行集成,在运行时设置属性值:

    kamel run --property <property>=<value> <integration>

    另外,您可以使用 --p 缩写表示法(使用 --property的位置):

    kamel run --property <property>=<value> <integration>

    例如:

    kamel run --property my.message="Hola Mundo" HelloCamelK.java --dev

    或者

    kamel run --p my.message="Hola Mundo" HelloCamelK.java --dev

    以下是示例结果:

    ...
    [1] 2020-04-13 15:39:59.213 INFO  [main] ApplicationRuntime - Listener org.apache.camel.k.listener.RoutesDumper@6e0dec4a executed in phase Started
    [1] 2020-04-13 15:40:00.237 INFO  [Camel (camel-k) thread #1 - timer://java] info - Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hola Mundo from java]
    ...

4.2.1.2. 在属性文件中提供运行时属性

您可以通过在运行时在命令行中指定属性文件 (*.properties) 来为 Camel K 集成配置多个属性。当您使用属性占位符在集成中定义属性时,如 {{my.items}},您可以使用属性文件在命令行中指定属性值,如 --p 文件 my-integration.properties

流程

  1. 创建集成属性文件。以下示例来自名为 my.properties 的文件:

    my.key.1=hello
    my.key.2=world
  2. 开发使用属性文件中定义的属性的 Camel 集成。以下示例 Routing.java 集成使用 {{my.key.1}}{{my.key.2=world}} 属性占位符:

    import org.apache.camel.builder.RouteBuilder;
    
    public class Routing extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("timer:property-file")
           .routeId("property-file")
           .log("property file content is: {{my.key.1}} {{my.key.2}}");
    
      }
    }
  3. 使用以下语法运行集成来引用属性文件:

    kamel run --property file:<my-file.properties> <integration>

    另外,您可以使用 --p 缩写表示法(使用 --property的位置):

    kamel run --p file:<my-file.properties> <integration>

    例如:

    kamel run Routing.java --property:file=my.properties --dev

4.2.2. 提供配置值

您可以使用 kamel run 命令的 --config 选项提供您希望 Camel K 操作器处理并解析为运行时属性的配置值。您可以在本地文本(UTF-8)文件中、OpenShift ConfigMap 或 OpenShift secret 中提供配置值。

运行集成时,Camel K operator 会对其进行处理,并将其添加到类路径中,以便您可以引用集成代码中的配置值,而无需提供准确的位置。

4.2.2.1. 指定文本文件

如果您有一个包含配置值的 UTF-8 文本文件,您可以使用 --config file:/path/to/file 选项使该文件可用(具有相同文件名)在运行的集成的 classpath 上。

先决条件

  • 设置 Camel K 开发环境
  • 您有一个或多个包含配置值的文本文件。

    例如,创建一个名为 resources-data.txt 的文件,其中包含以下行:

    the file body

流程

  1. 创建一个 Camel K 集成来引用包含配置值的文本文件。

    例如,以下集成(ConfigFileRoute.java)预期在 classpath 在运行时提供 resources-data.txt 文件:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ConfigFileRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("timer:config-file")
            .setBody()
                .simple("resource:classpath:resources-data.txt")
            .log("resource file content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --config 选项指定文本文件,使其可用于正在运行的集成。例如:

    kamel run --config file:resources-data.txt ConfigFileRoute.java --dev

    另外,您可以通过重复添加 --config 选项来提供多个文件,例如:

    kamel run --config file:resources-data1.txt --config file:resources-data2.txt ConfigFileRoute.java --dev

4.2.2.2. 指定 ConfigMap

如果您有一个包含配置值的 OpenShift ConfigMap,并且您需要对 ConfigMap 进行分类,使其可供 Camel K 集成使用,请使用 --config configmap:<configmap-name> 语法。

先决条件

  • 设置 Camel K 开发环境
  • 在 OpenShift 集群中存储了一个或多个 ConfigMap 文件。

    例如,您可以使用以下命令创建 ConfigMap:

    oc create configmap my-cm --from-literal=my-configmap-key="configmap content"

流程

  1. 创建引用 ConfigMap 的 Camel K 集成。

    例如,以下集成(名为 ConfigConfigmapRoute.java)在名为 my-cm 的 ConfigMap 中引用名为 my-configmap-key 的配置值。

    import org.apache.camel.builder.RouteBuilder;
    
    public class ConfigConfigmapRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("timer:configmap")
            .setBody()
                 .simple("resource:classpath:my-configmap-key")
            .log("configmap content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --config 选项来定义 ConfigMap 文件,使其可用于正在运行的集成。例如:

    kamel run --config configmap:my-cm ConfigConfigmapRoute.java --dev

    当集成启动时,Camel K operator 会使用 ConfigMap 的内容挂载 OpenShift 卷。

注: 如果您指定了集群中还不可用的 ConfigMap,则集成会在 ConfigMap 变为可用后等待并启动。

4.2.2.3. 指定 secret

您可以使用 OpenShift Secret 安全地包含配置信息。要对 secret 进行编码,以便可供 Camel K 集成使用,您可以使用 --config secret 语法。

先决条件

  • 设置 Camel K 开发环境
  • 在 OpenShift 集群中存储了一个或多个 Secret。

    例如,您可以使用以下命令创建 Secret:

    oc create secret generic my-sec --from-literal=my-secret-key="very top secret"

流程

  1. 创建引用 ConfigMap 的 Camel K 集成。

    例如,以下集成(名为 ConfigSecretRoute.java)引用位于名为 my-sec 的 Secret 中的 my-secret 属性:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ConfigSecretRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("timer:secret")
            .setBody()
                .simple("resource:classpath:my-secret")
            .log("secret content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --config 选项定义 Secret,使其可用于正在运行的集成。例如:

    kamel run --config secret:my-sec ConfigSecretRoute.java --dev

    当集成启动时,Camel K operator 会使用 Secret 的内容挂载 OpenShift 卷。

4.2.2.4. 引用 ConfigMap 或 Secret 中包含的属性

当您运行集成并使用 --config 选项指定 ConfigMap 或 Secret 时,Camel K operator 会将 ConfigMap 或 Secret 解析为运行时属性文件。在集成中,您可以在引用任何其他运行时属性时引用属性。

流程

  1. 创建包含属性的文本文件。

    例如,创建一个名为 my.properties 的文件,其中包含以下属性:

    my.key.1=hello
    my.key.2=world
  2. 根据属性文件创建 ConfigMap 或 Secret。

    例如,使用以下命令从 my.properties 文件创建 secret:

    oc create secret generic my-sec --from-file my.properties
  3. 在集成中,请参阅 Secret 中定义的属性。

    例如,以下集成(名为 ConfigSecretPropertyRoute.java)引用 my.key.1my.key.2 属性:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ConfigSecretPropertyRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("timer:secret")
            .routeId("secret")
            .log("{{my.key.1}} {{my.key.2}}");
    
      }
    }
  4. 运行集成并使用 --config 选项指定包含 my.key.1my.key.2 属性的 Secret。

    例如:

    kamel run --config secret:my-sec ConfigSecretPropertyRoute.java --dev

4.2.2.5. 过滤从 ConfigMap 或 Secret 获取的配置值

ConfigMap 和 Secret 可以保存多个源。例如,以下命令从两个源创建一个 secret (my-sec-multi):

oc create secret generic my-sec-multi --from-literal=my-secret-key="very top secret" --from-literal=my-secret-key-2="even more secret"

您可以使用 --config configmap--config secret 选项后使用 /key 表示法来限制集成检索到一个源的信息数量。

先决条件

流程

  1. 创建一个集成,使用来自 ConfigMap 或 Secret 中的一个源的配置值。

    例如,以下集成(ConfigSecretKeyRoute.java)仅使用来自 my-sec-multi secret 中的一个源的属性。

    import org.apache.camel.builder.RouteBuilder;
    
    public class ConfigSecretKeyRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("timer:secret")
          .setBody()
              .simple("resource:classpath:my-secret-key-2")
          .log("secret content is: ${body}");
      }
    }
  2. 使用 --config secret 选项和 /key 表示法运行集成。

    例如:

    kamel run --config secret:my-sec-multi/my-secret-key-2 ConfigSecretKeyRoute.java --dev
  3. 检查集成 pod,以验证是否只挂载指定的源(如 my-secret-key-2)。

    例如,运行以下命令来列出 pod 的所有卷:

    oc set volume pod/<pod-name> --all

4.2.3. 为正在运行的集成提供资源

您可以通过指定 kamel run 命令的 --resource 选项,为集成提供资源。您可以指定本地文本文件(1 MiB 最大文件大小)、ConfigMap (3MB)或 Secret (3MB)。您可以选择指定为资源存储的文件的目标。例如,如果要设置 HTTPS 连接,请使用 --resource 选项,因为您必须提供一个 SSL 证书,这是已知位置中预期的二进制文件。

当您使用 --resource 选项时,Camel K operator 不会解析查找运行时属性的资源,它不会将资源添加到 classpath 中。(如果要将资源添加到 classpath 中,您可以使用 JVM 特征

4.2.3.1. 将文本或二进制文件指定为资源

如果您有包含配置值的文本或二进制文件,您可以使用 --resource file:/path/to/file 选项来对文件进行序列化。默认情况下,Camel K operator 将材料化文件复制到 /etc/camel/resources/ 目录中。另外,您可以指定不同的目标目录,如 为资源指定目标路径 中所述。

先决条件

流程

  1. 创建一个 Camel K 集成,它会读取您提供的文件内容。

    例如,以下集成(ResourceFileBinaryRoute.java)解压缩并读取 resources-data.zip 文件:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ResourceFileBinaryRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("file:/etc/camel/resources/?fileName=resources-data.zip&noop=true&idempotent=false")
            .unmarshal().zipFile()
            .log("resource file unzipped content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --resource 选项将文件复制到默认目标目录(/etc/camel/resources/)。例如:

    kamel run --resource file:resources-data.zip ResourceFileBinaryRoute.java -d camel-zipfile --dev

    注: 如果您指定二进制文件,则会在集成中创建并解码文件内容的二进制表示。

    另外,您可以通过重复添加 --resource 选项来提供多个资源,例如:

    kamel run --resource file:resources-data1.txt --resource file:resources-data2.txt ResourceFileBinaryRoute.java -d camel-zipfile --dev

4.2.3.2. 将 ConfigMap 指定为资源

如果您有一个包含配置值的 OpenShift ConfigMap,并且您需要将 ConfigMap 识别为集成的资源,请使用 --resource <configmap-file& gt; 选项。

先决条件

  • 设置 Camel K 开发环境
  • 在 OpenShift 集群中存储了一个或多个 ConfigMap 文件。例如,您可以使用以下命令创建 ConfigMap:

    oc create configmap my-cm --from-literal=my-configmap-key="configmap content"

流程

  1. 创建 Camel K 集成来引用 OpenShift 集群上存储的 ConfigMap。

    例如,以下集成(名为 ResourceConfigmapRoute.java)引用名为 my-cm 的 ConfigMap,其中包含 my-configmap-key

    import org.apache.camel.builder.RouteBuilder;
    
    public class ResourceConfigmapRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("file:/etc/camel/resources/my-cm/?fileName=my-configmap-key&noop=true&idempotent=false")
            .log("resource file content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --resource 选项以对默认 /etc/camel/resources/ 目录中的 ConfigMap 文件进行解析,使其可用于正在运行的集成。

    例如:

    kamel run --resource configmap:my-cm ResourceConfigmapRoute.java --dev

    当集成启动时,Camel K operator 会使用 ConfigMap 的内容(如 my-configmap-key)挂载卷。

注: 如果您指定了集群中还不可用的 ConfigMap,则集成会在 ConfigMap 变为可用后等待并启动。

4.2.3.3. 将 Secret 指定为资源

如果您有一个包含配置信息的 OpenShift Secret,并且您需要将它化为一个或多个集成的资源,请使用 --resource <secret&gt; 语法。

先决条件

  • 设置 Camel K 开发环境
  • 在 OpenShift 集群中存储了一个或多个 Secret 文件。例如,您可以使用以下命令创建 Secret:

    oc create secret generic my-sec --from-literal=my-secret-key="very top secret"

流程

  1. 创建一个 Camel K 集成来引用存储在 OpenShift 集群上的 Secret。

    例如,以下集成(名为 ResourceSecretRoute.java)引用 my-sec Secret:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ResourceSecretRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
          from("file:/etc/camel/resources/my-sec/?fileName=my-secret-key&noop=true&idempotent=false")
              .log("resource file content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --resource 选项,在默认 /etc/camel/resources/ 目录中对 Secret 进行材料化,使其可用于正在运行的集成。

    例如:

    kamel run --resource secret:my-sec ResourceSecretRoute.java --dev

    当集成启动时,Camel K operator 会使用 Secret 的内容(如 my-sec)挂载卷。

注: 如果您指定了集群中还不可用的 Secret,则集成会在 Secret 变为可用后等待并启动。

4.2.3.4. 为资源指定目标路径

/etc/camel/resources/ 目录是挂载使用 --resource 选项指定的资源的默认位置。如果您需要指定要在其上挂载资源的不同目录,请使用 --resource @path 语法。

先决条件

流程

  1. 创建一个 Camel K 集成来引用包含配置属性的文件、ConfigMap 或 Secret。例如,以下集成(名为 ResourceFileLocationRoute.java)引用 myprops 文件:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ResourceFileLocationRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
          from("file:/tmp/?fileName=input.txt&noop=true&idempotent=false")
             .log("resource file content is: ${body}");
    
      }
    }
  2. 运行集成并使用带 @path 语法的 --resource 选项,并指定挂载资源内容的位置(文件、ConfigMap 或 Secret):

    例如,以下命令使用 /tmp 目录挂载 input.txt 文件:

    kamel run --resource file:resources-data.txt@/tmp/input.txt ResourceFileLocationRoute.java --dev
  3. 检查集成的 pod,以验证文件(如 input.txt)是否已挂载到正确的位置(例如,在 tmp 目录中)。例如,运行以下命令:

    oc exec <pod-name> -- cat /tmp/input.txt

4.2.3.5. 过滤 ConfigMap 或 Secret 数据

创建 ConfigMap 或 Secret 时,您可以指定多个信息源。例如,以下命令会从两个源创建一个 ConfigMap (名为 my-cm-multi):

oc create configmap my-cm-multi --from-literal=my-configmap-key="configmap content" --from-literal=my-configmap-key-2="another content"

当您运行与 --resource 选项的集成时,默认情况下,与多个源创建的 ConfigMap 或 Secret 都会被序列化。

如果要限制从 ConfigMap 或 Secret 恢复的信息数量,您可以在 ConfigMap 或 Secret 名称后指定 --resource 选项的 /key 表示法。例如,-- resource configmap:my-cm/my-key--resource secret:my-secret/my-key

您可以通过在 --resource configmap--resource secret 选项后使用 /key 表示法来限制集成检索到一个资源的信息数量。

先决条件

流程

  1. 创建使用 ConfigMap 或 Secret 中的一个资源的配置值的集成。例如,以下集成(名为 ResourceConfigmapKeyLocationRoute.java)引用 my-cm-multi ConfigMap:

    import org.apache.camel.builder.RouteBuilder;
    
    public class ResourceConfigmapKeyLocationRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
        from("file:/tmp/app/data/?fileName=my-configmap-key-2&noop=true&idempotent=false")
           .log("resource file content is: ${body} consumed from
            ${header.CamelFileName}");
    
      }
    }
  2. 运行集成并使用带 @path 语法的 --resource 选项,并指定挂载源内容的位置(文件、ConfigMap 或 Secret):

    例如,以下命令指定只使用 ConfigMap 中包含的源(my-configmap-key-2@)之一,并使用 /tmp/app/data 目录挂载它:

    kamel run --resource configmap:my-cm-multi/my-configmap-key-2@/tmp/app/data ResourceConfigmapKeyLocationRoute.java --dev
  3. 检查集成的 pod,以验证只有一个文件(如 my-configmap-key-2)是否已挂载到正确的位置(例如,在 /tmp/app/data 目录中)。例如,运行以下命令:

    oc exec <pod-name> -- cat /tmp/app/data/my-configmap-key-2
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.