【问题标题】:Different profile per spring boot application instance in cloud foundyCloud Foundry 中每个 Spring Boot 应用程序实例的不同配置文件
【发布时间】:2017-11-15 01:30:28
【问题描述】:

是否可以使用 ConfigurableEnvironment 和 Cloud Foundry 实例索引等方式为部署在 Cloud Foundry 中的 Spring Boot 应用程序的每个实例以编程方式设置不同的配置文件?

【问题讨论】:

  • 你的用例是什么?您真的不想拥有功能不同的应用程序实例。您推送到 CF 的每个应用程序都可以有一个或多个实例,并且这些实例应该完全相同。如果你想要不同的行为,你应该推送多个应用程序。
  • 实例具有相同的功能,不同之处在于配置文件将用于加载运行两个或多个浴作业的配置。 Eatch 作业将在它自己的实例上运行。
  • 如何在集群模式下使用石英调度程序将执行分散到所有实例上?如果您硬编码哪个实例正在运行哪个作业,那么如果一个实例出现故障,您就会遇到问题。

标签: spring-boot cloud-foundry


【解决方案1】:

我建议您考虑使用任务。

https://docs.cloudfoundry.org/devguide/using-tasks.html

这大概是如何工作的。

  1. 运行 cf push 将您的应用程序部署到 CF。如果您实际上没有要运行的应用程序,那也没关系。您只需要推送应用程序并启动它一次,以便它暂存并创建一个 Droplet。之后,您可以运行cf stop 来关闭实例(注意:cf push --no-start 将不起作用,因为应用程序至少需要暂存一次)。

  2. 运行cf run-task <app> <command>。这是您开始批处理作业的地方。 <command> 参数将是运行批处理作业的完整命令。在此,您可以包含一个参数来指示应使用的配置文件。例如:--spring.profiles.active=dev,hsqldb

    https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

    您需要使用java 可执行文件的完整或相对路径,因为Java buildpack 不会将它放到路径中。如果你想运行一个打印 JVM 版本的任务,你可以使用这个命令'.java-buildpack/open_jdk_jre/bin/java -version'

    例如:cf run-task <app> '.java-buildpack/open_jdk_jre/bin/java -version'

    请参阅SO post,了解在命令中硬编码 Java 可执行文件路径的缺点。我的建议是使用运行cf push 时列出的命令并根据需要进行修改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2017-11-22
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多