Spring Boot:通过app属性配置子域,主机名和端口

时间:2018-01-15 10:42:59

标签: spring-boot configuration

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

  • 本地;在我的机器上本地运行
  • 开发
  • UAT
  • PROD

当新用户注册我的应用时,后端会向他们发送电子邮件以验证其地址/帐户。在这封电子邮件中将有一个链接;用户单击在数据库中验证它们的链接,并允许它们立即登录并使用该应用程序。

这些链接当然必须内置环境:

  • 在本地,链接可能是http://localhost:9200/v1/data/accounts/verify?vt=12345
  • 在开发中链接可能是: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(localhost + port)。非本地我不需要指定端口,因为应用程序将在负载均衡器后面的节点上运行。在制作中,我不需要像devuat这样的特定于环境的子域。

为了让我的电子邮件在所有4个环境中正常运行,我需要设置一个环境变量,然后我的电子邮件生成器会使用它来正确生成链接。

可以使用自行开发的内容,例如application.properties中的自定义属性,例如emailDomain,并在每个环境的属性文件中设置不同的属性。

但我觉得构成Spring Boot社区的聪明人可能已经为我解决了这个问题......对吗?我可以设置一个Spring Boot应用程序属性来处理所有这些吗?

1 个答案:

答案 0 :(得分:2)

在评论中,我读到您的主要关注点是能够更新属性而无需修改.JAR / .WAR或更改某些代码。

这是可能的,因为您可以外部化Spring启动配置。如果您查看Externalized Configuration文档,则可以看到它在以下内容中查找属性:

  
      
  1. 操作系统环境变量。
  2.         

    ...

         
        
    1. 特定于配置文件的应用程序属性在打包的jar之外application-{profile}.properties和YAML变体)
    2.   
    3. 打包在jar中的特定于配置文件的应用程序属性(application-{profile}.properties和YAML变体)
    4.   
    5. 应用程序属性在打包的jar之外   (application.properties和YAML变体)。
    6.   
    7. 打包在jar中的应用程序属性(application.properties和YAML变体)。
    8.   

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