springboot-profiles 多环境配置整合避坑(保姆级入门)

第一步:从简单的说起

件开发中经常有开发环境、测试环境、预发布环境、生产环境,而且一般这些环境配置会各不相同,比如数据库、应用端口号等配置就不一样,每次打包发布手动改配置麻烦且容易出错,如果能在不修改配置的基础上简单操作就能实现切换是不是很美,那么我就一个application.yml配置文件,这么多份环境配置难道都写在这里,那我们试试看


image.png

原来application.yml文件可以用 --- 来划分区块,一个区块代表一个环境,这样就把多环境配置内容集中写入到一个主配置文件中了,主配置文件application.yml就是系统启动默认会使用的配置文件,那我们启动一下看看效果(注意:第一区块是主配置内容必须要有的,启用其它区块会将相同配置内容进行覆盖替换)


image.png

好的,当前使用的默认配置端口是8080,那么如何切换成8888呢,配置如下激活dev,再次运行


image.png

查看运行后端口为8888,这样我们就完成了简单的多环境切换,你也可以切换成9999,只需要将dev改成prod
image.png

目前我们多环境只对端口进行了区别,如果每个区块配置不同的数据库配置,比如第一区块配置成本地数据库那么他就会连本地数据库,那么prod当然就是配置生产的数据库了。如果本地、测试、生产所有配置都一样唯独数据库不一样,那么每个区块会有很多重复的配置,而且application.yml文件被塞得满满当当,查看蛮头疼的,但是在这个前提上我如果本地开发时想连接prod的数据库,那么直接active:prod启用就可以了。

至此,看起来用idea开发时切换是没问题的,那么打包时是什么情况呢,那就认为idea运行的是哪个环境,打包时默认用的就是哪个环境,当前idea项目启动运行端口为8888,这里可以先停掉idea当前这个服务,因为打包后启动jar包会导致冲突,然后我们maven打包,先clean是将你当前的jar包删除清理,package为打包


image.png

找到j项目ar包


image.png

image.png

image.png

cmd回车进入控制台,执行命令 运行jar包

java -jar 你的jar包
image.png

启动后查看端口为8888 ,说明我们之前的猜想没问题,就是本地idea当前运行的是哪个环境,打包后就是哪个环境


image.png

我想在这个时候切换环境怎么办,简单!我们ctrl+c退出停掉当前启动的项目,重新启动执行以下命令

java -jar 你的jar包 --spring.profiles.active=prod
image.png

启动端口为9999没错,当然你部署到Linux也是一样的

第二步:来点有难度的玩儿法

新建几个环境配置文件,我想大家对这个都不陌生,项目会根据约定规则后缀dev、prod、test找到相应文件


image.png

application-dev.yml端口改成8082,其它原有配置不变,然后启动


image.png

image.png

发现项目启动端口为8082


image.png

说明用多个文件配置优先级要高于集中在application.yml这种方式,而且这种方式优于集中配置便于区分管理环境,其它都和上述测试情况一致这里就不做对比测试了(原则就是被激活application-dev.yml的环境配置与application.yml主配置中相同内容会被前者覆盖替换),一般这种方式用的比较多,application.yml中的区块就可以删除掉了。

另外idea中还可以这样激活当前选用环境


image.png
第三步:来点高年级的吧

大家可能经常看到有些项目他是这样指定当前激活的环境,如下


image.png

这是使用maven实现多环境运行和打包,首先需要对pom进行以下配置

 
        
            
                src/main/resources
                true
                
                    application.yml
                    application-${package.environment}.yml
                    **/*.xml
                
            
        
 



 
        
            dev
            
                dev
            
            
            
                true
            
        
        
            test
            
                test
            
        
        
            
            prod
            
                prod
            
        
    
image.png

好的同步pom之后,maven会出现一个profiles的选项,因为没有配置profiles之前是没有的,而且发现它默认勾选了dev但是灰色的,我们先启动看看能不能起到激活dev作用


image.png

启动成功,dev应该是8082,说明已激活,这里灰色选中可以理解为默认激活


image.png

点击勾选变成深色,启动依然8082(注意每次点击切换都要reimport刷新下maven)
image.png
image.png

继续点击不勾选,启动报错


image.png
image.png

不勾选会导致@package.environment@引用失效,项目无法启动


image.png

同样也会导致这里爆红


image.png

此处就有坑了,按理说我们只能选一个环境才对啊,结果这里可以双击选中多个


image.png

结果启动的是prod,但是ctrl点击@package.environment@切换到了这个位置


image.png

也就是这块有bug按理说是互斥的,但是多点几次是混乱的完全无规律可言,所以尽量选中其中一个,不要多选,这样就正常了
image.png

此时启动后也是test的端口,ctrl点击@package.environment@切换到了test的位置,然后勾选prod同上步骤测试也没问题


image.png

再来看看maven打包


image.png

同样找到jar包cmd运行jar包启动,发现激活了dev,没问题,那么java -jar 你的jar包 --spring.profiles.active=test这种方式就很有意思了,首先它会去找test这个配置文件,发现找不到,因为压根没打包进来,所以只有勾选了才会打包,是不是这样我们全部勾选打包试试看。


image.png
image.png

打包后直接启动,激活的是prod,然后我们指定激活test,发现没什么卵用,启动端口成了8080就是按照没有任何配置的情况来处理,也就是把prod的配置都搞得不能用了


image.png

所以,我们还是需要哪个指定哪个打包的比较好

也可以指定环境打包

mvn clean package -P dev
mvn clean package -P test
mvn clean package -P prod

你可能感兴趣的:(springboot-profiles 多环境配置整合避坑(保姆级入门))