【问题标题】:Customize Spring Boot launch script自定义 Spring Boot 启动脚本
【发布时间】:2022-01-24 01:02:32
【问题描述】:

我有一个典型的 Spring Boot 2.x 应用程序。我目前正在使用 Docker 部署应用程序。我还在使用“分发”提供的内置 shell 脚本——当通过 Gradle 完成时,阅读:assembleBootDist、installBootDist 等。

问题是我必须在启动应用程序之前执行 (a) 其他一些 shell 脚本,(b) 以某种方式插入这个 shell 脚本内置的, (c) 或其他达到相同效果的东西。

所以我想知道是否有办法以干净的方式完成此任务,而不会引入任何安全问题等。我一直在尝试插入bootStartScripts(Gradle)任务,但没有运气。我知道bootJar 中有一个launchScript 属性,但据我所知,它完全取代了Spring Boot 提供的实际内置脚本——我正在避免这种情况。

任何其他 shell-fu 也可以工作,只要安全方面没有受到损害。

【问题讨论】:

    标签: spring-boot gradle


    【解决方案1】:

    这是一种 hack,但提供了 spring boot 默认脚本自定义 - 可能您可以使用“inlinedConfScript”(解释为here),它基本上指向一个旨在提供配置的脚本,但因为它是一个脚本文件,技术上你可以像往常一样编写脚本代码。

    inlinedConfScript

    引用应该在默认值中内联的文件脚本 启动脚本。这可用于设置环境变量,例如 加载任何外部配置文件之前的 JAVA_OPTS。

    【讨论】:

    • 感谢您的建议。 inlinedConfScript 看起来非常符合我的要求,但我的印象是这只适用于作为 Unix/Linux 服务运行的 Spring Boot 应用程序......但它可能也适用于普通应用程序。将在我这边发布任何更新。
    【解决方案2】:

    Another solution 可以(仍然)使用所需的 shell 脚本并提供初始行为,然后执行 Spring Boot“分发”(Gradle)任务生成的内置 shell 脚本:

    #!/usr/bin/env sh
    
    printf "%s\n" "Running some initialization steps..."
    # ...
    # ...
    
    exec /path/to/application "$@"
    

    将其保存为docker-entrypoint.sh,并在Dockerfile 的ENTRYPOINT 指令中照常使用。

    【讨论】:

      猜你喜欢
      • 2019-10-07
      • 2022-06-14
      • 2020-03-21
      • 2020-04-06
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多