现在的情况是我有两个 API 项目,API A 向 API B 发送 HTTP 请求。这两个 API 都部署在开发环境和生产环境中。
我的目标是:根据特定的配置文件(dev 或 prod)来构建项目,以便代码可以使用特定的 baseurl 来在正确的环境中与正确的 API 进行通信。
因此,如果我基于 prod 标志构建 API A,则希望它使用特定的 URL 来向其自己的生产环境上部署的 API B 发送 HTTP 请求。
现在的情况是我有两个 API 项目,API A 向 API B 发送 HTTP 请求。这两个 API 都部署在开发环境和生产环境中。
我的目标是:根据特定的配置文件(dev 或 prod)来构建项目,以便代码可以使用特定的 baseurl 来在正确的环境中与正确的 API 进行通信。
因此,如果我基于 prod 标志构建 API A,则希望它使用特定的 URL 来向其自己的生产环境上部署的 API B 发送 HTTP 请求。
看起来你在提到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与属性文件的后缀匹配。
你可以将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.properties
和application-prod.properties
--spring.profiles.active=dev
和--spring.config.additional-location=config/application.properties
这样,外部配置的属性将被包含在部署过程中。这些.properties
文件在Spring中具有最高优先级。
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
mvn package
命令并获得了构件,那么假设你在包含构件的文件夹中,你可以输入java -jar myapp.jar --spring.profiles.active=prod
来运行它。当然,你必须确保Spring Boot应用程序已经正确构建(使用spring-boot-maven插件)。替换myapp.jar
为构件的完整名称。 - Mark Bramnikmvn package
成功之后,你应该进入"target"目录,然后你会看到生成的构件... - Mark Bramnik