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 2 中的下一个错误吗?