Spring Boot - 配置文件(application.properties)中的Profiles用于定义HTTP请求的baseUrl

3

现在的情况是我有两个 API 项目,API A 向 API B 发送 HTTP 请求。这两个 API 都部署在开发环境和生产环境中。

我的目标是:根据特定的配置文件(dev 或 prod)来构建项目,以便代码可以使用特定的 baseurl 来在正确的环境中与正确的 API 进行通信。

因此,如果我基于 prod 标志构建 API A,则希望它使用特定的 URL 来向其自己的生产环境上部署的 API B 发送 HTTP 请求。

2个回答

6

看起来你在提到maven的配置文件,但是你应该检查一下spring的配置文件。这个概念会有所改变:

在不同环境中,你不应该构建不同的构件。

相反,在服务A中创建一个spring配置文件:

application-dev.properties:

url.addr=dev-service-host:1234

application-prod.properties:

url.addr=prod-service-b-host:4321

然后使用--spring.profiles.active=dev(或prod)标志运行应用程序。

Spring Boot会自动加载正确的定义,因为dev/prod与属性文件的后缀匹配。


嗨,谢谢你的回复。差点就让它工作了。你知道怎么运行这个应用程序吗?能否请你提供完整的带标志的运行命令给我? - M Yil
如果你已经运行了mvn package命令并获得了构件,那么假设你在包含构件的文件夹中,你可以输入java -jar myapp.jar --spring.profiles.active=prod来运行它。当然,你必须确保Spring Boot应用程序已经正确构建(使用spring-boot-maven插件)。替换myapp.jar为构件的完整名称。 - Mark Bramnik
再次感谢您的回复。当我使用命令时,遇到了下一个问题:“无法访问jar文件dairy-app-0.0.1-SNAPSHOT.jar”。这是因为它找不到吗?我真的需要帮助.. - M Yil
mvn package成功之后,你应该进入"target"目录,然后你会看到生成的构件... - Mark Bramnik
我发了另一篇帖子,也许这个更清楚一些:https://dev59.com/j7noa4cB1Zd3GeqPMjuT - M Yil

0

你可以将Spring-Boot配置文件定义为:

spring.profiles.active=prod

你还应该在resources中对.properties文件进行配置:

  • application-dev.properties中,你应该有api.b.url={api_b_url_on_dev_environment}

  • application-prod.properties中,你应该有api.b.url={api_b_url_on_prod_environment}

或者如果你不想在更改属性后重新编译应用程序,你可以使用外部的.properties文件。

为了在应用程序部署过程中包含它们,请按照以下步骤操作:

  • 在某个config目录中添加application-dev.propertiesapplication-prod.properties
  • 使用以下属性部署你的应用程序:--spring.profiles.active=dev--spring.config.additional-location=config/application.properties

这样,外部配置的属性将被包含在部署过程中。这些.properties文件在Spring中具有最高优先级。


谢谢你的回复。我该如何根据配置文件运行这个项目呢? - M Yil
你可以这样使用它:java -jar your_application.jar --spring.profiles.active=prod --spring.config.additional-location=config/application.properties 这将使用你的 /resources/application-prod.properties 和外部的 /config/application-prod.properties(如果有的话)。 - htshame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接