My Spring Boot应用程序将有4种不同的环境:
当新用户注册我的应用时,后端会向他们发送电子邮件以验证其地址/帐户。在这封电子邮件中将有一个链接;用户单击在数据库中验证它们的链接,并允许它们立即登录并使用该应用程序。
这些链接当然必须内置环境:
http://localhost:9200/v1/data/accounts/verify?vt=12345
http://dev.myapp.example.com/v1/data/accounts/verify?vt=12345
http://uat.myapp.example.com/v1/data/accounts/verify?vt=12345
http://myapp.example.com/v1/data/accounts/verify?vt=12345
在所有三种环境中,主机名+端口都不同。在本地我指定localhost:9200
(localhost + port)。非本地我不需要指定端口,因为应用程序将在负载均衡器后面的节点上运行。在制作中,我不需要像dev
或uat
这样的特定于环境的子域。
为了让我的电子邮件在所有4个环境中正常运行,我需要设置一个环境变量,然后我的电子邮件生成器会使用它来正确生成链接。
我可以使用自行开发的内容,例如application.properties
中的自定义属性,例如emailDomain
,并在每个环境的属性文件中设置不同的属性。
但我觉得构成Spring Boot社区的聪明人可能已经为我解决了这个问题......对吗?我可以设置一个Spring Boot应用程序属性来处理所有这些吗?
答案 0 :(得分:2)
在评论中,我读到您的主要关注点是能够更新属性而无需修改.JAR / .WAR或更改某些代码。
这是可能的,因为您可以外部化Spring启动配置。如果您查看Externalized Configuration文档,则可以看到它在以下内容中查找属性:
- 操作系统环境变量。
醇>...
- 特定于配置文件的应用程序属性在打包的jar之外(
application-{profile}.properties
和YAML变体)- 打包在jar中的特定于配置文件的应用程序属性(
application-{profile}.properties
和YAML变体)- 应用程序属性在打包的jar之外 (
application.properties
和YAML变体)。- 打包在jar中的应用程序属性(
醇>application.properties
和YAML变体)。
因此,理想情况下,您可以在JAR旁边放置一个application.properties
文件,并根据您运行的环境更新该文件中的属性。