Spring boot Spring引导:通过应用程序属性配置子域、主机名和端口

Spring boot Spring引导:通过应用程序属性配置子域、主机名和端口,spring-boot,configuration,Spring Boot,Configuration,我的Spring Boot应用程序将有4种不同的环境: 本地的;在我的机器上本地运行 发展 UAT 刺激 当新用户注册我的应用程序时,后端会向他们发送一封电子邮件,以验证他们的地址/帐户。在这封电子邮件中将有一个链接;用户单击在数据库中验证他们的链接,允许他们现在登录并使用应用程序 当然,这些链接必须具有内置的环境: 在本地,链接可能是http://localhost:9200/v1/data/accounts/verify?vt=12345 在dev中,链接可能是:http://dev.

我的Spring Boot应用程序将有4种不同的环境:

  • 本地的;在我的机器上本地运行
  • 发展
  • UAT
  • 刺激
当新用户注册我的应用程序时,后端会向他们发送一封电子邮件,以验证他们的地址/帐户。在这封电子邮件中将有一个链接;用户单击在数据库中验证他们的链接,允许他们现在登录并使用应用程序

当然,这些链接必须具有内置的环境:

  • 在本地,链接可能是
    http://localhost:9200/v1/data/accounts/verify?vt=12345
  • 在dev中,链接可能是:
    http://dev.myapp.example.com/v1/data/accounts/verify?vt=12345
  • 在UAT中,链接可能是:
    http://uat.myapp.example.com/v1/data/accounts/verify?vt=12345
  • 在Prod中,链接可能是:
    http://myapp.example.com/v1/data/accounts/verify?vt=12345
在这三种环境中,主机名+端口都不同。在本地,我指定
localhost:9200
(本地主机和端口)。非本地我不需要指定端口,因为应用程序将在负载平衡器后面的节点上运行。在生产环境中,我不需要特定于环境的子域,如
dev
uat

为了让我的电子邮件在所有4种环境中都能正常工作,我需要设置一个环境变量,然后由我的电子邮件生成器使用该变量来正确生成链接

我可以使用一些自产的东西,比如
application.properties
中的自定义属性,比如
emailDomain
,并在每个环境的属性文件中设置不同的属性


但我觉得组成Spring Boot社区的聪明人可能已经为我解决了这个问题……他们有吗?我是否已经可以设置一个Spring Boot应用程序属性来为我解决所有这些问题?

在评论中,我了解到您主要关心的是能够在不修改.JAR/.WAR或更改某些代码的情况下更新该属性

这是可能的,因为您可以将Spring引导配置外部化。如果您检查文档,您可以看到它在以下范围内查找属性:

  • 操作系统环境变量
  • 特定于配置文件的应用程序属性在打包的jar之外(
    应用程序-{Profile}.properties
    和YAML变体)
  • jar中打包的特定于概要文件的应用程序属性(
    application-{Profile}.properties
    和YAML变体)
  • 应用程序属性在打包的jar之外
    application.properties
    和YAML变体)
  • 打包在jar中的应用程序属性(
    Application.properties
    和YAML变体)

  • 因此,理想情况下,您可以在JAR旁边放置一个
    application.properties
    文件,并根据您运行的环境更新该文件中的属性。

    您可以为不同的域定义属性文件。让spring引导根据启动应用程序时使用的配置文件选择一个,tanks@pvpkiran(+1),但是我不同意这种方法(将环境逻辑烘焙到配置文件中)。IMHO正确外部化的配置文件完全不受环境影响,也不知道环境。您可以让配置管理设置应用程序在启动时可用的特定于环境的属性,而不是一些笨拙的“if(env==dev){host=“dev.example.com”}或if(env==uat)…”逻辑。基本上,您应该能够建立一个新的环境,比如说“demo”,而无需修改代码!若您想要这样的功能,那个么您应该查看SpringCloudConfigServer。即使这样,您也必须重新启动应用程序(没有它,您无法告诉spring boot您希望从哪个配置文件开始)