文章目录

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

前言

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

项目结构

各个配置文件

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

dev.properties:

jdbc.driver.class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=dev_user
jdbc.password=dev123456redis.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=prod123456redis.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=test123456redis.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+版本号

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.apple</groupId><artifactId>springboot_maven</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies><profiles><profile><id>dev</id><properties><!-- 自定义属性env,在不同环境有不同的值 --><env>dev</env></properties><activation><!-- 默认激活dev环境的配置 --><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><env>test</env></properties></profile><profile><id>prod</id><properties><env>prod</env></properties></profile></profiles><build><!--达成jar包的时候的名称--><finalName>${project.artifactId}</finalName><!-- 指定filter,根据最终profile下的env属性获取对应的配置文件 --><filters><filter>src/main/filters/${env}.properties</filter></filters><!-- 开启资源过滤,让Maven能解析资源文件中的Maven属性 --><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources><plugins><plugin><artifactId>maven-resources-plugin</artifactId><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin></plugins></build>
</project>

构建

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

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

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

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

里面的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=dev123456redis.host=localhost
redis.port=6309
redis.password=dev123456

Idea切换环境

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

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

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

出现的问题

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

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

SpringBoot问题

一开始碰到执行后编译后的target目录下.class文件并没有被替换

原因:
发现最终是因为springboot导致的,查看其pom继承,

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>

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



解决方案:
1、将application.properties中的占位符由${key} -> @key@
2、覆盖springboot的默认规则,在build标签下新增这个plugin标签的内容

 <plugins><plugin><artifactId>maven-resources-plugin</artifactId><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin>
</plugins>

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

idea多环境配置及问题解决相关推荐

  1. OpenFPGA 环境配置及问题解决

    OpenFPGA 环境配置及问题解决 环境配置过程 git clone https://github.com/LNIS-Projects/OpenFPGA.git​cd OpenFPGA/.githu ...

  2. androidstudio环境配置常见问题解决

    Android Studio Design界面不显示控件的解决方法 前言: 本人因为学校开了安卓的这门课程,所以再花了一段时间研究官网的安装教程后,就自己搭建了安卓的环境,但是发现除了第一次Desig ...

  3. Fast-Planner安装、环境配置以及问题解决

    Fast-Planner是香港科技大学沈劭劼老师团队开源的项目,旨在复杂的未知环境中实现四旋翼快速飞行. Fast-Planner的github网址为: https://github.com/HKUS ...

  4. springboot项目导入idea中环境配置相关问题解决

    一.maven的setting.xml配置 一般配置: 本地库<localRepository></localRepository>:用来自定义存放下载的包文件的位置. 中心库 ...

  5. 【区块链技术开发】 关于Windows10平台Solidity语言开发环境配置

    目录 1.安装 Node.js 2.安装 Solidity 编译器 3.安装 Remix IDE 4.安装 MetaMask 浏览器插件 5.环境配置与问题解决 6. 安装Ganache:以太坊区块链 ...

  6. xampp环境配置下出现的问题解决 — mysqli_real_connect(): (HY000/1045): Access denied for user ‘root‘@‘localhost‘

    XAMPP 环境配置下出现的问题 版本 :xampp 7.3.1      今天,柳妹在虚拟机上面又一次搭建xampp的环境的时候,在mysql的管理界面对于root@localhost 管理用户进行 ...

  7. Mac下eclipse的Hadoop开发环境配置中以及windows->preferences下看不到Hadoop/MapReduce的配置项问题解决

    Mac下eclipse的Hadoop开发环境配置中以及windows->preferences下看不到Hadoop/MapReduce的配置项问题解决 1. 下载hadoop插件 下载好hado ...

  8. 安装Oracle 11g时遇到“【INS-13001】此环境不满足最低配置”的问题解决

    安装Oracle 11g时遇到"[INS-13001]此环境不满足最低配置"的问题解决 参考文章: (1)安装Oracle 11g时遇到"[INS-13001]此环境不满 ...

  9. Linux.配置Hadoop环境的一些问题解决

    几篇教程 官方教程 很良心的中文版教程 问题与解决 问:伪分布环境配置的时候,启动Hadoop时提示输入root的密码,但是无论如何也无法输入正确.(本人参考很良心的中文版教程进行的配置) $ sud ...

最新文章

  1. AOP和IOC的作用
  2. PYTHON——TCPUDP:Socket实现远程执行命令
  3. 2022年Python数据分析的宝藏地带
  4. Linux Shell脚本入门教程系列之(一)Shell简介
  5. python闹钟界面程序_「Python编程」自由管理时间之编写一个小闹钟起床
  6. leetcode字节跳动探索
  7. 解读IBM存储虚拟化的两大法宝
  8. 利用信号量机制实现前驱关系
  9. Linux下安装配置各种软件和服务
  10. CAD教程:CAD看图软件中怎么设置比例?
  11. 大学的学习目标与期望
  12. mapi java_使用协议“ mapi://”从Java在Outlook中打开邮件
  13. chrome控制台如何把vw显示成px_罗技lua怎么做到在脚本控制台显示中文的? - 『悬赏问答区』 - 吾爱破解 - LCG...
  14. 俯仰 (pitch) - 偏摆 (yaw) - 翻滚 (roll)
  15. ASEMI-GBU808整流桥如何测好坏
  16. MPI编程----计算cosx的积分
  17. HR问多久能入职,千万别着急辞职!
  18. Linux性能分析工具top命令详解
  19. Photoshop 2021 Win10系统总安装失败,打不开,501错误等,如何解决安装教程!
  20. 藏尾诗 (20 分)

热门文章

  1. 使用pypinyin将汉字转换为全拼
  2. spring全方位深入探索,万分膜拜!
  3. Kubernetes、C语言小白变怪兽、C++ Primer Plus、TCP/IP网络编程、JavaScript高级程序设计
  4. 网站邀请码php,简单的PHP邀请码系统
  5. 几种TFT-LCD屏幕接口的差别
  6. 赫兹Hertz重新上市:转道纳斯达克挂牌,租车行业重现光辉?
  7. 【C语言】C语言成长之路之关于C语言的操作符以及一些表达式的讲解(՞• •՞).
  8. 计算机进位制转化ppt,各种进位制之间的相互转换.PPT
  9. 超酷! Atlas给黑白视频“上色”
  10. 快节奏多人在线游戏网络入门系列教程(2):客户端预测与服务器协调