• 前言:对于一个项目,开发和生产环境之间会使用不同的配置文件,最简单的例子就是数据库连接池的配置了。当然,可以在打包上线前对配置文件进行替换,不过这也太low了吧。

简单的pom.xml中的配置内容

  • 比如我们在maven项目中引入了内嵌式的tomcat插件(当然打包方式是要war包),如下代码
	<!--在build标签中-->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 指定端口 -->
<port>8821</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>
<plugins>

指定了端口号是8821,启动项目后(在idea右边的maven project),就可以使用8821端口访问。

8821是我们开发的端口,如果我们想打包上传到服务器,然后就修改这个端口为8891。

  • 首先在pom.xml使用properties标签来定义端口号

  • 然后就创建多个环境,多个环境对tomcat_port这个属性进行定义
<!--和build平级-->
<profiles>
<profile>
<!--开发环境,这个id就是名称-->
<id>dev</id>
<properties>
<!--这个标签就是定义你要设定的properties中的属性-->
<tomcat_port>8821</tomcat_port>
</properties>
</profile>
<profile>
<!--生产环境-->
<id>pro</id>
<properties>
<tomcat_port>8821</tomcat_port>
</properties>
</profile>
</profiles>
  • 然后修改我们的tomcat7系列的maven命令,在后边添加参数:

    -P 环境id,在idea中,右键这个maven命令,就可以设置了

设置完后,点击运行,

除了tomcat:run 外,其他的maven命令,如:

package -P dev
install -P pro

这些都是可以的。

不同环境下使用不同的数据库配置文件

和上边的方法类似,不同的是它会引入项目中的properties配置文件

  • 首先,src/main/resources下创建dbprops文件夹,在这个文件夹下创建一个db_dev.properties,内容如下:
#这个env前缀可以自定义,也可以不用
env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/tb_dev?characterEncoding=utf-8
env.jdbc.username=dev
env.jdbc.password=dev

也创建一个db_pro.properties

#这个env前缀可以自定义,也可以不用
env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/tb_pro?characterEncoding=utf-8
env.jdbc.username=pro
env.jdbc.password=pro
  • 然后,修改我们src/main/resources下的db.properties配置文件,这个配置文件就是我们之前的数据库连接配置文件(因为datasource中指定的路径就是这个配置文件)
#之前写的是确定的地址,这回就使用变量
jdbc.driver=${env.jdbc.driver}
jdbc.url=${env.jdbc.url}
jdbc.username=${env.jdbc.username}
jdbc.password=${env.jdbc.password}
  • 在pom.xml中添加属性
  <properties>
<!--这个db_env是自定义的,随便起-->
<db_env>dev</db_env>
</properties>
  • 在pom.xml中定义profile
 <profiles>
<profile>
<!--环境名-->
<id>dev</id>
<properties>
<!--这个名要和之前定义的db_dev.properties中的dev相同,下边会看到拼接-->
<db_env>dev</db_env>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<db_env>pro</db_env>
</properties>
</profile>
</profiles>
  • 在build标签中添加一个filters和resource指令
	<filters>
<filter>src/main/resources/dbprops/db_${db_env}.properties</filter>
</filters> <resources>
<resource>
<!--这是拦截这个目录下的配置文件,进行处理-->
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>

好了,我们这使用指定打包

package -P pro

然后用触压生成的war包,打开WEB-INF\classes\db.properties文件可以看到

Maven项目多环境之间的配置文件的切换的更多相关文章

  1. Java项目和maven项目中如何获取&设置配置文件中的属性

    通常情况下,我们会在一些配置文件文件中配置一些属性.如: indexPath = E\:\\Tomcat_7.0\\webapps\\ipost_stage\\lucene\\index imgUpl ...

  2. [maven] 项目不同环境自动打包

    应用背景 项目需要发布到本地环境,测试环境和生产环境甚至不同的生产环境上.这时候配置文件的一些参数需要被频繁的修改来修改去.为了解决这样的繁琐工作,就得使用maven profile特性. 步骤 1. ...

  3. Maven根据不同环境打包不同配置文件

    开发项目时会遇到这个问题:开发环境,测试环境,生产环境的配置文件不同,打包时经常要手动更改配置文件,更改的少还可以接受,但是如果需要更多个配置文件,手动的方法就显得非常笨重了. 下面介绍一种方法,利用 ...

  4. eclipse 新建 maven 项目 添加 spring hibernate 的配置文件 详情

    主要配置文件 pom.xml 项目的maven 配置文件 管理项目所需 jar 依赖支持 web.xml 项目的总 配置文件  :添加 spring和hibernate 支持 applicationC ...

  5. maven项目多环境打包问题

    1.xxx-api是基于springboot的模块 2.配置文件 application.properties spring.profiles.active=@activeEnv@ applicati ...

  6. 导入maven项目各个注解均报错了

    所遇问题: 导入maven项目各个注解均报错了; 思考1: 这个项目使用了springboot;spring是个”大容器”,所有对象的创建和管理都交给了它, (SpringBoot是一个框架,一种全新 ...

  7. Windows版Jenkins+SVN+Maven自动化部署环境搭建【转】

    前言 因今年公司新产品线较多,为了降低耦合,达到业务分离.重用,提高内部开发效率的目的,采用了基于服务组件.前后端分离的架构体系.与之前传统单应用架构相比,系统部署.配置更加复杂,为了能够频繁地将软件 ...

  8. eclipse 构建从 SVN 上下载的可识别的 maven 项目

    从 SVN 上下载的 maven 项目中含有父项目,属于 maven 的嵌套,每个子项目和父项目虽有 pom.xml 文件,在结构上也是 maven 然而并不是 eclipse 识别的 maven 项 ...

  9. Spring boot项目分环境Maven打包,动态配置文件,动态配置项目

    Spring boot Maven 项目打包 使用Maven 实现多环境 test dev prod 打包 项目的结构 在下图中可用看出,我们打包时各个环境需要分开,采用 application-环境 ...

随机推荐

  1. PyCharm的几个使用技巧

      PyCharm是个十分强大的Python编辑器,笔者在日常的工作中学到了很多该IDE的使用技巧,有的是从别人那里学到的,有的是自己学习的.笔者深感自己的开发能力不足,因此希望能够将这些使用技巧记录 ...

  2. [wcp部署]Linux(Ubuntu)安装部署WCP

    1.安装JAVA运行环境 配置环境变量及安装jdk mkdir /usr/local/java tar -zxvf jdk-8u31-linux-x64.gz #解压jdk包 mv jdk1.8.0_ ...

  3. NOIP模拟 26

    我辛辛苦苦敲了3.5h的码 得分和一份8B的码一样多 自闭555. T1 marshland 最小费用可行流, 板子不会,建图更不会. 当然是用暴搜得到0分的好成绩啦 补了补板子. %了%RNB. 学 ...

  4. bzoj1004 card

    明知是burnside然而根本不会然后无耻地颓了题解后一脸傻气的我: 直接套公式???为啥方案数==等价类数量啊??? skyh:显然啊(狂笑)(hey wxy!他问为啥方案书等于等价类数量!) wx ...

  5. N42-qq-林友埙-第二周作业

    1.Linux发行版的系统目录名称命名规则及用途 2.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息 1.文件的元数据是指文件的属性.大小.创建时间.访问时间.属主属组等 ...

  6. 【控制系统数字仿真与CAD】实验二:结构图法数字仿真

    一. 实验目的 1. 掌握结构图法仿真复杂控制系统的方法: 2. 掌握复杂系统联接矩阵W和输入联接矩阵W0的求解过程: 3. 掌握复杂系统的环节连接,矩阵A. B. C.D的求解过程: 4. 掌握MA ...

  7. ElasticSearch(二):文档的基本CRUD与批量操作

    ElasticSearch(二):文档的基本CRUD与批量操作 学习课程链接<Elasticsearch核心技术与实战> Create 文档 支持自动生成文档_id和指定文档_id两种方式 ...

  8. GitHub和Git

    GitHub托管项目代码 首先一些基本概念: repository(仓库) 用来存放项目代码,每个项目代表一个仓库,开一个项目就意味着你有一个仓库. star(收藏) 收藏方便下次查找. fork(复 ...

  9. 搭建Nginx七层反向代理

    基于https://www.cnblogs.com/Dfengshuo/p/11911406.html这个基础上,在来补充下七层代理的配置方式.简单理解下四层和七层协议负载的区别吧,四层是网络层,负载 ...

  10. rsync同步基本用法

                                                                                                        ...