如何通过 gradle 任务使用 spring 配置文件运行 bootRun

新手上路,请多包涵

我正在尝试设置 gradle 以启动 bootRun 启用各种弹簧配置文件的进程。

我当前的 bootRun 配置如下:

 bootRun {
    // pass command line options from gradle to bootRun
    // usage: gradlew bootRun "-Dspring.profiles.active=local,protractor"
    if (System.properties.containsKey('spring.profiles.active')) {
        systemProperty "spring.profiles.active", System.properties['spring.profiles.active']
    }
}

我想用 gradle 任务设置系统属性,然后执行 bootRun

我的尝试看起来像这样:

 task bootRunDev

bootRunDev  {
    System.setProperty("spring.profiles.active", "Dev")
}

几个问题:

  1. systemProperty 是spring boot bootRun配置的一部分吗?
  2. 是否可以在另一个任务中设置系统属性?
  3. 我的下一步应该是什么?我需要得到 bootRunDev 配置发生在 bootRun
  4. 我应该研究另一种方法吗

-埃里克

原文由 Eric Francis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

最简单的方法是定义默认值并允许它被覆盖。我不确定在这种情况下 systemProperty 的用途是什么。简单的论点就可以完成这项工作。

 def profiles = 'prod'

bootRun {
  args = ["--spring.profiles.active=" + profiles]
}

运行开发:

 ./gradlew bootRun -Pdev

要为您的任务添加依赖项,您可以执行以下操作:

 task setDevProperties(dependsOn: bootRun) << {
  doFirst {
    System.setProperty('spring.profiles.active', profiles)
  }
}

在 Gradle 中有很多方法可以实现这一点。

编辑:

为每个环境配置单独的配置文件。

 if (project.hasProperty('prod')) {
  apply from: 'gradle/profile_prod.gradle'
} else {
  apply from: 'gradle/profile_dev.gradle'
}

每个配置都可以覆盖任务,例如:

 def profiles = 'prod'
bootRun {
  systemProperty "spring.profiles.active", activeProfile
}

在这种情况下,通过提供 prod 标志来运行,就像这样:

 ./gradlew <task> -Pprod

原文由 Vaelyr 发布,翻译遵循 CC BY-SA 4.0 许可协议

Spring Boot v2 Gradle 插件文档 提供了一个答案:

6.1.将参数传递给您的应用程序

与所有 JavaExec 任务一样,当使用 Gradle 4.9 或更高版本 时,可以使用 --args='<arguments>' 从命令行将参数传递到 bootRun。

要运行服务器并将活动配置文件设置为 dev

 $ ./gradlew bootRun --args='--spring.profiles.active=dev'

原文由 Ivar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题