【问题标题】:Maven Profile for Spring Boot App on Google App EngineGoogle App Engine 上 Spring Boot 应用程序的 Maven 配置文件
【发布时间】:2018-12-07 11:41:23
【问题描述】:

我有一个 spring boot 应用程序,我想使用 app engine maven 插件将它部署在 Google 应用程序引擎上。

一切正常,除了我找不到 Google 应用引擎为 Spring Boot 应用加载正确的 application.properties 文件的方法。

我有 application-prod.properties、application-default.properties 和 application-test.properties。在本地,我可以轻松选择要开始使用的环境/配置文件,例如

mvn appengine:run -Dspring.profiles.active=prod

但是当我尝试对部署工作做同样的事情时,比如

mvn appengine:deploy -Dspring.profiles.active=prod

那行不通。它不会加载 application-prod.properties,而是回退到 application-default.properties。

我是否误解了某些内容,或者这应该有效吗?如果这不起作用,因为谷歌应用引擎只是在没有传入任何参数的情况下开始战争,有没有办法在谷歌上为应用/服务定义环境变量,我可以在其中存储数据库 URL 和特定于环境的凭据等内容?

感谢你们的帮助。

【问题讨论】:

  • 明确地说,您使用的是 Spring 配置文件,而不是 Maven 配置文件。这是两个完全不同的东西。 Maven 配置文件适用于构建类型,而 Spring 配置文件适用于运行时。

标签: java spring maven google-app-engine spring-boot


【解决方案1】:

如果使用 App Engine 柔性环境,请在您的 app.yaml 中添加以下内容

env_variables:
    JAVA_USER_OPTS: '-Dspring.profiles.active=prod'

这将由运行时添加到 JVM 启动命令中。有关 openjdk 运行时,请参阅 documentation。默认情况下,您的应用使用 jetty-runtime,它继承了 openjdk-runtime 的选项。

如果使用 App Engine 标准环境,请在您的 appengine-web.xml 中添加以下内容:

<system-properties>
  <property name="spring.profiles.active" value="prod" />
</system-properties>

【讨论】:

  • 如果您在 JAR 包中部署 Spring Boot 应用程序,您实际上将直接使用 opendjk-runtime。
  • 我正在使用 spring 配置文件,并且我只有一个 appengine-web.xml 文件,因为我使用标准环境和 maven appengine 插件。有没有办法确保为 appengine 上的给定应用程序添加弹簧配置文件“prod”作为启动参数?
  • 在带有 appengine-web.xml 的 App Engine 标准中,它略有不同。我也用这些说明更新了我的答案。
  • 如果我们说“alpha”和“prod”弹簧型材(都使用 GAE 标准),我们想为某些属性设置特定值。我们如何使用单个 appengine-web.xml 文件来实现这一点?
  • 我不确定我是否理解您的问题,但是如果您想为特定配置文件设置属性,您可以在那里进行,如果您想设置属性而不考虑配置文件,您会在 .
【解决方案2】:

尝试使用jvmFlags 参数以使用所需属性https://cloud.google.com/appengine/docs/standard/java/tools/maven#development_server_goals 启动您的应用程序

<jvmFlags>
  <jvmFlag>-Dspring.profiles.active=prod</jvmFlag>
</jvmFlags>

【讨论】:

  • 感谢您的反馈。我应该把那些jvmFlags放在哪里? appengine-web.xml?但是话又说回来,我怎么能有多个环境呢? appengine-web.xml 对于每个环境都会有所不同,对吧?
  • 这些是插件的 Maven 设置,所以在你的 pom 中你需要为那个插件添加一个配置块并在那里添加这些。
  • 我刚刚将它添加到插件配置中,例如: com.google.cloud.toolsappengine-maven-plugin 1.3.1-Dspring.profiles.active=prod 但还是 application-default.properties 而不是 application -prod.properties 已加载。有什么想法吗?
  • 使用 -X 运行命令,您应该能够看到它使用哪些参数启动 jar。它也可能无法正确获取插件定义,因此请检查调试输出和您的 pom 之间的属性匹配。
【解决方案3】:

当前的答案对我不起作用。

相反(因为我使用的是 app.yaml 而不是 app-engine.xml)我在 app.yaml 中添加了以下两行:

env_variables:
    SPRING_PROFILES_ACTIVE: "myProfileName"

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2018-06-12
    • 2019-05-04
    • 2012-12-11
    • 1970-01-01
    • 2014-04-08
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多