idea多环境配置及问题解决

文章目录

    • 前言
    • 项目结构
    • 各个配置文件
          • filters文件夹下的三个不同环境的配置文件
          • resources文件下的配置文件
          • pom.xml
    • 构建
    • Idea切换环境
      • 出现的问题
      • SpringBoot问题

前言

正常在企业里面的项目都会有开发环境、测试环境、生产环境,各个环境配置可能都会不一样,我们在构建时,会涉及到环境配置的切换。来回手工修改配置,效率低下,容易出错。可以配置多个含有不同环境配置的Profile,在构建时指定构建环境,达到多环境下快速灵活构建的目的。下面我们来模拟这种原理。

项目结构

idea多环境配置及问题解决_第1张图片

各个配置文件

filters文件夹下的三个不同环境的配置文件

dev.properties:

jdbc.driver.class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=dev_user
jdbc.password=dev123456

redis.host=localhost
redis.port=6309
redis.password=dev123456

prod.properties:

jdbc.driver.class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=prod_user
jdbc.password=prod123456

redis.host=localhost
redis.port=7309
redis.password=prod123456

test.properties:

jdbc.driver.class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=test_user
jdbc.password=test123456

redis.host=localhost
redis.port=8309
redis.password=test123456
resources文件下的配置文件

db.properties:

jdbc_driver_class=${jdbc.driver.class}
jdbc_connection_url=${jdbc.connection.url}
jdbc_username=${jdbc.username}
jdbc_password=${jdbc.password}

redis.properties:

redis.host=${redis.host}
redis.port=${redis.port}
redis.password=${redis.password}
pom.xml

标签说明:

< filters>:

使用指定的filter进行过滤,在执行mvn命令的时候带上-Ppro就代表生产环境,就会加载生产环境的properties,-Pdev就代表开发环境(默认)

< resources>< resource>< directory>:

资源文件位置src/main/resources/,这下面的资源文件的${}会全部被替换成filter中的标签内容。

directory指定的value会作为classes的资源跟目录,比如指定:src/main/resources/,则classes下会出现config等包,若指定:src/main/resources/config/,则classes下直接编译生成config包下的文件,不会额外出现config等其他包结构。因为他把config作为了根目录

< finalName>: 打包成jar或者war包的时候的名称,不指定的话就是artifactId+版本号




    4.0.0
    jar

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.1.RELEASE
         
    

    com.apple
    springboot_maven
    1.0-SNAPSHOT

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter
        
    

    
        
            dev
            
                
                dev
            
            
                
                true
            
        

        
            test
            
                test
            
        

        
            prod
            
                prod
            
        
    

    
        
        ${project.artifactId}

        
        
            src/main/filters/${env}.properties
        

        
        
            
                src/main/resources
                true
            
        

        
            
                maven-resources-plugin
                
                    utf-8
                    true
                
            
        
    

构建

这里先推荐一下idea里面的maven helper插件:可以查看依赖树,排除依赖冲突,这里还有其他作用:比如右键直接RUN Maven使用命令

idea多环境配置及问题解决_第2张图片

直接右键项目Run Maven即可进行一些命令操作:这里其实就是将一些maven的cmd命令变成了可视化,New Goal可以定制自己的maven命令

idea多环境配置及问题解决_第3张图片

后面我们要运行test环境,就直接Run这个命令即可!

idea多环境配置及问题解决_第4张图片

idea多环境配置及问题解决_第5张图片

选择第一个图中的Run compile编译,就会生成target目录,里面生成了对应的编译后的class文件,这里默认是dev环境

idea多环境配置及问题解决_第6张图片

里面的db.properties和redis.properties都被替换成了对应的值,上面直接Run Compile就是默认的dev环境!

jdbc_driver_class=com.mysql.jdbc.Driver
jdbc_connection_url=jdbc:mysql://localhost:3306/mydb
jdbc_username=dev_user
jdbc_password=dev123456

redis.host=localhost
redis.port=6309
redis.password=dev123456

Idea切换环境

实际公司项目中,我们会有多个环境,我们其实可以直接点击这个Profiles里面进行切换!

idea多环境配置及问题解决_第7张图片

我们要切换成prod,这时候就直接勾选即可,我们这时候继续执行Run compile命令,编译后的target就会变成了prod环境的内容

检查配置有没有生效,编译成功后,可以直接Ctrl+左键点击是可以跳转的对应的环境,并且鼠标悬浮也有值显示

idea多环境配置及问题解决_第8张图片

出现的问题

1、有时会切换环境之后,不生效的情况,主要原因是上一个配置换编译target文件夹没有清除;
解决方法:先clean清除编译文件,再刷新一下maven的配置

idea多环境配置及问题解决_第9张图片

2、环境不要选择多个,如下图情况,
只会取最下面的prod配置,dev配置是不生效的

idea多环境配置及问题解决_第10张图片

SpringBoot问题

一开始碰到执行后编译后的target目录下.class文件并没有被替换
idea多环境配置及问题解决_第11张图片
原因:
发现最终是因为springboot导致的,查看其pom继承,

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.1.RELEASE
         
    

进入后发现,springboot默认指定资源文件中的占位符为@@,并不是maven默认的 ${}

idea多环境配置及问题解决_第12张图片
idea多环境配置及问题解决_第13张图片
解决方案:
1、将application.properties中的占位符由${key} -> @key@
2、覆盖springboot的默认规则,在build标签下新增这个plugin标签的内容
idea多环境配置及问题解决_第14张图片

 
            
                maven-resources-plugin
                
                    utf-8
                    true
                
            

参考文章:
https://blog.csdn.net/qq_43377237/article/details/103869813
https://www.jianshu.com/p/929b9aa70dc8

你可能感兴趣的:(工具使用,Maven)