Spring-boot Amazon Elastic Beanstalk 忽略“SPRING_APPLICATION_JSON”

Posted

技术标签:

【中文标题】Spring-boot Amazon Elastic Beanstalk 忽略“SPRING_APPLICATION_JSON”【英文标题】:Spring-boot Amazon Elastic Beanstalk ignores 'SPRING_APPLICATION_JSON' 【发布时间】:2016-11-07 13:52:23 【问题描述】:

我已尝试使用我的应用程序的 jar 和 war 版本,但无论我做什么,SPRING_APPLICATION_JSON 在部署到 Elastic Beanstalk 时都会被忽略。当使用相同的 jar 在本地测试时,这是可行的。

export SPRING_APPLICATION_JSON='"server":  "port": 5000  '
java -jar my-app-1.0.1-SNAPSHOT.jar

... snip useless output
2016-07-05 12:18:02.877  INFO 10654 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 5000 (http)
2016-07-05 12:18:02.886  INFO 10654 --- [           main] com.me.app.MyApplication      : Started MyApplication in 22.827 seconds (JVM running for 23.514)

在 Elastic Beanstalk 中的 AWS 上设置相同的 JSON 时(显示 jar 版本)

但是当应用程序在 AWS 中启动时。日志显示它没有看到 server.port 的更新配置值

2016-07-05 15:58:33.511  INFO 2267 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-07-05 15:58:33.520  INFO 2267 --- [           main] com.me.app.MyApplication      : Started MyApplication in 37.746 seconds (JVM running for 47.043)

为什么这在本地有效,但在 Elastic Beanstalk 上无效?

【问题讨论】:

【参考方案1】:

所以经过一些阅读和测试。事实证明,这是 Elastic Beanstalk 用户界面中的一个错误。任何需要报价的属性都不起作用。这与How to config Meteor on AWS/EBS using METEOR_SETTINGS environment variable 相同

我确实使用.ebextensions 解决了这个问题。这可以正确地让您插入转义值。

option_settings:
  - option_name: SPRING_APPLICATION_JSON
    value: "server":"port": 5000

【讨论】:

【参考方案2】:

由于 eb 使用 json 格式,因此将 json 作为 base64 传递对我来说效果最好。

我正在使用这样的 Procfile

web: SPRING_APPLICATION_JSON=$(echo SPRING_APPLICATION_JSON_BASE64 | base64 --decode) java $JAVA_OPTS -jar app.jar $JAVA_ARGS

并使用我的 base64 编码的 json 字符串配置环境变量 SPRING_APPLICATION_JSON_BASE64。

如果 .ebextensions 不是一个选项,这很好用,因为您经常更改独立于版本控制的配置值,或者像我一样要求它在其中传递秘密。

【讨论】:

以上是关于Spring-boot Amazon Elastic Beanstalk 忽略“SPRING_APPLICATION_JSON”的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot系列:初试spring-boot

Spring-boot01

Spring-boot01

spring-boot:我可以修复 spring-boot 2 中的下一个错误吗?

使用 spring-boot:run 时是不是可以使用 spring-boot 命令行属性?

第二个spring-boot程序