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

    没睡醒就考试,蓝绶 考试前我在擦眼镜 好像总也擦不干净? 就像石乐志一样一直地在擦 cbx捅了我几下,好像想说什么? 没睡醒,不理 终于擦完了! 雾草要考试? T1 联 先离散化,再正面上线段树 em ...

  2. CSS(5)---通俗讲解盒子模型

    CSS(5)---盒子模型 盒子模型四个关键字:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 一.概念 1. 概念 盒子 ...

  3. KETTLE常见问题和优化

    1.创建MySQL空资源库报错问题:因为boolean类型的问题,Mysql中的boolean类型实际上保存为TINYINT,需要手动的修改生成资源库的sql脚本,将其中的插入用户ENABLED的值由 ...

  4. Linux基础指令--韩顺平老师课程笔记

    一.vi和vim编辑器 ①.三种模式 所有的 Linux 系统都会内建 vi 文本编辑器.vim 具有程序编辑的能力,可以看做是 vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计. ...

  5. Python类属性与实例属性理解

    按理讲,类属性改变,类的实例对象这个属性也应该被改变,但是在python中实际却不是这样 class test(): name = 111 a = test() b = test() a.name = ...

  6. pandas数据导出Execl

    脚本主要功能是将数据库查询到的结果,通过pandas写到到execl文件中. #!/usr/bin/env python #-*- coding: utf8 -*- from sqlalchemy i ...

  7. C语言I博客作业08

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业 我在这个课程的目标是 熟悉使用while和do-while结构解决问题 这个作业在那个具体方面帮助我实现目标 pta题目及查找的资料 ...

  8. Linux下mysql的主从复制配置

    1.准备两台数据库环境,或者单台多实例环境,能正常启动和登录. 数据库的安装和多实例配置请参考https://www.cnblogs.com/qiuhom-1874/p/9757061.html. 2 ...

  9. haproxy+keepalived练习

    小的网站结构 说明:如果部署在云上,比如阿里云上,不需要自己部署keepalived,直接买阿里云的slb即可,slb然后分发流量到两台haproxy机器 一.先部署两个web服务器 编译安装ngin ...

  10. Conda/Miniconda/Anaconda 常用命令整理及介绍

    作者:HELO 出处:http://www.cnblogs.com/HELO-K 欢迎转载, 转载时请保留此声明, 谢谢! 在这里整理一份全一点的 Conda 常用命令, 方便大家日常使用时参考, 一 ...