You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot构建部署前注入GitHub Secrets到application.properties

GitHub Action 注入Spring Boot配置到Heroku部署方案

你之前直接在Heroku部署Action的with块中追加application.properties格式配置不生效,原因是第三方Action的输入参数仅支持它预先定义的字段,不会自动识别自定义配置项。以下两种方案均可实现需求:

方案一:Spring Boot环境变量自动映射(推荐)

该方案无需修改本地配置文件,符合配置与代码分离的最佳实践:
Spring Boot原生支持配置宽松绑定,系统环境变量会自动映射到对应配置项,映射规则为:

  • 配置项中的.替换为_
  • 所有字母转为大写
    你需要的三个数据库配置对应环境变量如下:
  • spring.datasource.url → SPRING_DATASOURCE_URL
  • spring.datasource.username → SPRING_DATASOURCE_USERNAME
  • spring.datasource.password → SPRING_DATASOURCE_PASSWORD

你使用的AkhileshNS/heroku-deploy Action提供了heroku_config_vars参数,可直接传递自定义环境变量到Heroku运行环境。Spring Boot读取配置时环境变量优先级高于application.properties文件内的配置,会自动覆盖文件中的空值。
修改后的完整工作流配置:

name: Heroku deployment

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Deploy to Heroku
      uses: AkhileshNS/heroku-deploy@v3.12.12
      with:
        heroku_api_key: ${{secrets.HEROKU_API_KEY}}
        heroku_email: ${{secrets.HEROKU_EMAIL}}
        heroku_app_name: event-handler
        # 注入数据库配置为Heroku环境变量
        heroku_config_vars: |
          SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }}
          SPRING_DATASOURCE_USERNAME=${{ secrets.SPRING_DATASOURCE_USERNAME }}
          SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }}

提前在GitHub项目的Secrets页面添加对应三个数据库配置的密钥即可,本地application.properties里的空值无需修改,开发环境可自行填写本地数据库连接参数,生产环境会自动被Heroku环境变量覆盖。

方案二:CI流程中直接写入application.properties文件

如果有特殊场景必须将配置值写入项目内的配置文件再部署,可在代码检出后、部署前新增Shell步骤,将Secret值写入配置文件:

name: Heroku deployment

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    # 写入数据库配置到application.properties
    - name: Inject database config
      run: |
        sed -i "s|spring.datasource.url=|spring.datasource.url=${{ secrets.SPRING_DATASOURCE_URL }}|g" src/main/resources/application.properties
        sed -i "s|spring.datasource.username=|spring.datasource.username=${{ secrets.SPRING_DATASOURCE_USERNAME }}|g" src/main/resources/application.properties
        sed -i "s|spring.datasource.password=|spring.datasource.password=${{ secrets.SPRING_DATASOURCE_PASSWORD }}|g" src/main/resources/application.properties
    - name: Deploy to Heroku
      uses: AkhileshNS/heroku-deploy@v3.12.12
      with:
        heroku_api_key: ${{secrets.HEROKU_API_KEY}}
        heroku_email: ${{secrets.HEROKU_EMAIL}}
        heroku_app_name: event-handler

这里用sed命令直接替换原有配置文件里的空值,不会产生重复配置项,比直接追加内容更稳妥。


内容的提问来源于stack exchange,提问作者Simone Lungarella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:36:30