背景
为防止出现各环境配置文件不同步的情况,现根据实际开发情况,制定该配置文件编写参考。
介绍
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
根据实际应用场景,存在多环境配置需求(开发dev、测试test、生产prod……),因此多数情况采用多环境配置文件的办法。
springboot当中,application是我们的主配置文件,至于是yml结尾的文件还是properties结尾的文件,这两种都可以的,没有实质区别,都是更改springboot全局默认值。唯一的区别就是语法区别。
环境区分:
- dev: 开发环境
- test: 测试环境
- prod: 生产环境(线上)
用法详解:
这里以properties文件为例:创建三个配置文件,其中application.properties用来指定环境。application-环境名称 这个是多配置文件的命名规则。这个后缀环境名称,在指定的时候会用到的。
> application.properties
这里我们指定开发环境,在实际开发当中,一般开发环境和生产环境相同的配置会存放到该配置文件当中,这样可以合理的管理配置文件,看着不会那么杂乱。
spring.profiles.active=dev
> application-dev.properties
server.port=8081
> **application-test.properties**
server.port=8082
> **application-prod.properties**
server.port=8083
------
目的
根据实际情况存在以下情况:
开发阶段根据需求变更了配置,例如接口地址,此时生产环境的接口地址未定,暂未更新;此时只更新了开发环境和生产环境的配置。开发测试完毕后,生产环境的配置忘记同步变更成最新的接口地址,因此导致生产环境的配置错误。
针对此类问题,提出两种方案:
方案一
根据springboot全局配置文件的特性,可以采用分割与统一的方式:
以接口地址为例,通常情况接口地址组成结构为 `【域名/ip】 + 【路径】` 组成,不同环境下`【域名/ip】`这部分内容是不同的,但是`【路径】`这部分应是相同的。因此得出方案为:
> 将接口地址分割,`【域名/ip】`部分放入环境配置文件(application-环境名称)中,`【路径】`部分放入全局配置文件(application.properties)中。
该方案的优点在于,各环境下`【域名/ip】`并不会经常变动,`【域名/ip】`放在环境配置文件中可以根据不同环境请求不同域名/ip;而放在全局配置文件中的`【路径】`可以保证不同环境请求的路径是相同的。
代码示例:
> **application.properties**
spring.profiles.active=dev
third.api.no1=/api/no1
third.api.no2=/api/no2
> **application-dev.properties**
server.port=8081
third.api.host=http://dev.third.com
> **application-test.properties**
server.port=8082
third.api.host=http://test.third.com
> **application-prod.properties**
server.port=8083
third.api.host=http://prod.third.com
> **ThirdConfig.java**
@Value("${third.api.host}+${third.api.no1}")
private String apiNo1;
@Value("${third.api.host}+${third.api.no2}")
private String apiNo2;
方案二
原理与方案一相同,采用分割与统一的方式:
> 将接口地址分割,`【域名/ip】`部分放入环境配置文件(application-环境名称)中,`【路径】`部分放入**常量类**中。
优点在于放入常量类中便于在开发时快速跟踪到位,并且配置为空时编译器会自动提醒。
代码示例:
> **application-dev.properties**
server.port=8081
third.api.host=http://dev.third.com
> **application-test.properties**
server.port=8082
third.api.host=http://test.third.com
> **application-prod.properties**
server.port=8083
third.api.host=http://prod.third.com
> **MiddleConstants.java**
private String API_NO1 = "/api/no1";
private String API_NO2 = "/api/no2";
> **MiddleConfig.java**
@Value("{third.api.host}")
private String apiHost;
> **Demo.java**
@Autowired
private ThirdConfig thirdConfig;
String url1 = thirdConfig.getapiHost + ThirdConstants.API_NO1;
String url2 = thirdConfig.getapiHost + ThirdConstants.API_NO2;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)