Spring boot Spring引导:通过应用程序属性配置子域、主机名和端口
我的Spring Boot应用程序将有4种不同的环境: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.
- 本地的;在我的机器上本地运行
- 发展
- 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引导配置外部化。如果您检查文档,您可以看到它在以下范围内查找属性:
应用程序-{Profile}.properties
和YAML变体)application-{Profile}.properties
和YAML变体)application.properties
和YAML变体)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您希望从哪个配置文件开始)