-1

问题:

我使用 Thorntail 2.4.0-Final 在 JavaEE 中创建了一个应用程序。我有 2 个 yaml 文件,“project-default.yml”和“project-local.yml”。我的 Postgres 信息在 default.yml 中,我的 H2 信息在 local.yml 中。如果我使用命令行“java -jar myapplication.jar”启动我的应用程序,他将使用 default.yml。如果我将 -Slocal 添加到命令行,他使用 local.yml,但我希望他默认使用 local.yml。我知道我可以重命名 2 个 yaml 文件,以便默认为 H2,但这并不能解决我的问题,因为我想将我的应用程序部署到云中,并且在云中他应该使用 Postgres 而不是 H2 和没有选项可以说“cf push myapplication -S ....”之类的话。

问题:

当我在本地启动我的应用程序而不添加“-Slocal”时,如何告诉我的应用程序他使用“project-local.yml”文件?

或者

我如何通过添加命令说他应该使用哪个 yaml 文件来推送我的应用程序?

4

1 回答 1

2

Thorntail 无法知道它在哪个环境中运行。配置文件的目的是让控制应用的配置。如果您知道如何可靠地(!)检测到“本地”环境,我认为这将是一个很好的功能请求。

也就是说,Cloud Foundry 不允许您配置用于启动应用程序的命令似乎很奇怪。根据http://cli.cloudfoundry.org/en-US/cf/push.html,您可以使用-c参数来配置命令。

不过,这似乎相当低级,所以这是另一种选择。除了-sand-S参数,您还可以使用thorntail.project.stage.fileandthorntail.project.stage系统属性。在这里,可以设置thorntail.project.stage,大致相当于-S。根据https://github.com/cloudfoundry/java-buildpack/blob/master/docs/framework-java_opts.md,您可以通过创建JAVA_OPTS环境变量来设置任意系统属性。

因此,如果您切换project-defaults.yml到本地设置(使用 H2),并使用生产设置(使用 PostgreSQL)进行创建,那么在 Cloud Foundryproject-cloud.yml中创建一个环境变量就足够了。JAVA_OPTS="-Dthorntail.project.stage=cloud"

于 2019-03-29T12:30:08.873 回答