文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary
一般来说,在日常开发中都会分多个环境,比如git代码分支会分为dev(开发)、release(测试)、pord(生产)等多个环境。可以说每个环境对应的配置信息(比如数据库、缓存、消息队列MQ等)都不相同。因此不同的环境肯定需要对应不同的配置文件。接下来学习一下怎么配置多环境的配置文件。
因为SpringBoot做多环境配置比较简单,而且现在大部分项目基本都会使用SpringBoot,所以这里就介绍怎么用SpringBoot做多环境配置。
单文件在实际中使用得并不多,不过也可以实现多环境配置,这里简单介绍一下。以application.yml
配置文件举例,你要在一个配置文件里面配置多个环境的配置,肯定需要分割线将其隔开,所以SpringBoot就规定了使用---
进行隔开每个环境。
spring: application: name: mydemo profiles: active: prod # 选择prod环境配置 #整合mybatis mybatis-plus: mapper-locations: classpath:mapper/*Mapper.xml type-aliases-package: com.yehongzhi.mydemo.model configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl --- # 开发环境 server: port: 8080 spring: profiles: dev datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://DEV_IP:3306/user?createDatabaseIfNotExist=true username: root password: 123456 --- # 测试环境 server: port: 8090 spring: profiles: release datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://RELEASE_IP:3306/user?createDatabaseIfNotExist=true username: root password: 123456 --- # 生产环境 server: port: 8888 spring: profiles: prod datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://PROD_IP:3306/user?createDatabaseIfNotExist=true username: root password: 123456
单文件配置多环境的缺点很明显,就是会导致这个application.yml
文件非常大,不够清晰。最好是一个环境单独一个文件,这样就清晰很多。于是乎就有了多文件版本。
一般SpringBoot的配置文件都是叫application.yml
或者application.properties
,这里用application.yml
举例,配置多环境配置文件,文件名需要满足这样的格式:application-{profile}.yml
。看下图就明白了。
换而言之,dev环境的配置文件就叫做application-dev.yml
,那么怎么选择哪个环境的配置文件呢,其实很简单,只需要在application.yml
加上如下配置:
spring: profiles: active: dev
这就表示选择加载application-dev.yml
文件,何以见得?
一般在启动完成之后,我们可以在控制台搜索关键字profiles
找到对应的环境。
所以我们就可以在application.yml里面,通过spring.profiles.active
切换不同的环境。这就是多文件版本。
但是我们在平时开发时发现,这个配置要经常改来改去,非常麻烦,有没有不用改这个配置就可以切换的方法呢?当然有。
首先在pom.xml
文件增加以下环境变量的配置。
<profiles> <profile><!-- 开发环境 --> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> </profile> <profile><!-- 测试环境 --> <id>release</id> <properties> <profiles.active>release</profiles.active> </properties> </profile> <profile><!-- 生产环境 --> <id>prod</id> <properties> <profiles.active>prod</profiles.active> </properties> </profile> </profiles>
接着在application.yml
配置文件中使用@profiles.active@
来配置环境变量。
spring: profiles: active: '@profiles.active@'
接着刷新Maven,可以在IDEA右侧中选择对应的环境,如下图:
当需要切换环境时,就不需要改配置文件的内容,只需要勾选对应的环境即可,就方便很多。
一般在项目开发中,都需要配置信息能够在运行时更改配置,于是乎就有了配置中心的概念。配置中心当然也有多环境的配置。
在Nacos配置中心就有命名空间的概念,我们可以使用命名空间来实现多环境配置。首先引入Maven依赖:
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.0.2.RELEASE</version> </dependency> </dependencies> <profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> </profile> <profile> <id>release</id> <properties> <profiles.active>release</profiles.active> </properties> </profile> <profile> <id>prod</id> <properties> <profiles.active>prod</profiles.active> </properties> </profile> </profiles>
第二步,启动Nacos,然后在创建对应的命名空间和配置文件。
第三步,在项目中增加bootstrap.yml
文件。
spring: application: name: mydemo profiles: active: '@profiles.active@' cloud: nacos: config: server-addr: 127.0.0.1:8848 file-extension: yaml group: DEFAULT_GROUP namespace: a4a33d52-371b-451a-a3c1-d01c1d343331 #dev命名空间的ID enabled: true prefix: ${spring.application.name} refresh-enabled: true
在IDEA配置项目启动时设置环境变量。
这样就完成了,启动项目,就可以读到Nacos配置中心的dev命名空间的mydemo-dev.yaml
文件。
因为DataId的定义规则是${prefix}-${spring.profiles.active}.${file-extension}
。
prefix默认规则是获取${spring.application.name}的值。可以通过spring.cloud.nacos.config.prefix进行配置。
spring.profiles.active即为当前环境对应的profile。可以通过spring.profiles.active进行配置。
file-extension为配置文件的数据格式。可以通过spring.cloud.nacos.config.file-extension进行配置。
以上就是多环境配置的三种方式,多环境配置基本上是创建新项目的基本操作,所以掌握多环境配置还是很有必要的。感谢大家的阅读,希望看完之后能对你有所收获。
觉得有用就点个赞吧,你的点赞是我创作的最大动力~
我是一个努力让大家记住的程序员。我们下期再见!!!
能力有限,如果有什么错误或者不当之处,请大家批评指正,一起学习交流!