导航
导航

springboot多环境自定义配置

网上分享的大部分都是关于多环境配置,通过springboot默认的application-dev.properties:开发环境 application-test.properties:测试环境 application-prod.properties:生产环境来实现 就不必献丑了。 哈哈
以此为基础上厚着脸皮分享下负责公司商城的支付服务时对于多环境 自定义配置的解决方法。

支付服务是用户所能见的商城系统正向流程的最后一道环节了(后面发货、物流属于仓库erp范畴了)。但是在内部上流联通订单服务,下流对接各大第三方支付平台。大一点的商城还会有自己的虚拟交易媒介,比如我们商城的钱包。

缘由:对接支付宝、微信、以及各银行支付直接对接(与银行合作原因)还有和第三方集成的综合支付等,参数配置众多,如果只是以dev test来区分,还是相当“庞大”的数据量,也不好管理。

解决办法(不唯一):
创建application-dev.properties 开发环境、 application-prod.properties 生产环境
创建 application-alizfb_dev.properties 、 application-alizfb_prod.properties、 application-wx_dev.properties 等文件区分各支付渠道

application.properties文件写法
spring.profiles.active=dev
spring.profiles.include=alizfb_dev,wx_dev

这样就可以独立的更换各支付渠道的配置参数
后续搭配Spring Cloud Config 分布式配置中心达到环境的动态切换

附上相关spring官方文档地址 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

spring.profiles.include的作用
截取官网文档一段:Sometimes it is useful to have profile-specific properties that add to the active profiles rather than replace them. The spring.profiles.include property can be used to unconditionally add active profiles.
通俗来说就是有时候 我们只想把特定的配置属性添加到生效的配置中而不是替换,可以使用include属性

提一下配置文件的优先级
src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性
在相同优先级位置同时有application.properties和application.yml,那么application.properties里的属性里面的属性就会覆盖application.yml