多个环境

一个项目,在家的时候可能会在本机上运行,在公司可能在内网测试环境运行,上线后会在生产环境运行,在不同的环境中会有一些配置是不一样的,至少数据库就不一样。如果每换一个环境就去改所有配置太过于麻烦,以下方法就是通过一个参数灵活的切换不同的环境

项目结构

pom.xml

	<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
</profiles> <build>
<filters>
<filter>filters/${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>

<profiles>:就是properties文件,通过加载不同的profile来区别不同的环境

<activeByDefault>:true代表当前激活的配置,false代表未激活,如果要切换环境只需要修改true和false,执行maven-update

<filter>:通过激活的profile中的<env>内容来加载filters目录下的不同的properties,自动过滤不同的环境

<filtering>:true就是用filters/${env}.properties的参数值来过滤src/main/resources中的properties文件,之后详解

Test.java

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties; import org.springframework.stereotype.Component; @Component
public class Test {
static {
Properties prop = new Properties();
InputStreamReader in = null;
try {
in = new InputStreamReader(Test.class.getClassLoader().getResourceAsStream("aaa.properties"), "UTF-8");
prop.load(in);
System.out.println(prop.getProperty("aaa"));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

这是一个最基本的静态块,在项目启动的时候,读取aaa.properties文件中的参数aaa的值。需要配置spring自动扫描注解

properties

aaa.properties

aaa=${aaa}

这个aaa没有配一个固定参数值,而是用的${aaa},表示根据当前环境的不同过滤不同的值

dev.properties

aaa=bbb

dev就是当前激活的开发环境,这里的aaa就是要过滤替代${aaa}的值。在测试环境test.properties中可以设置不同的值

运行项目

如图,实际加载的aaa参数的值是dev.properties而不是aaa.properties






maven(16)-灵活的环境构建的更多相关文章

  1. Maven私服Nexus3.x环境构建操作记录

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

  2. 使用Maven Profile实现多环境构建

    在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...

  3. Linux下Maven私服Nexus3.x环境构建操作记录【转】

    Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件.Ma ...

  4. Maven与Nexus3.x环境构建详解

    一.Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件. ...

  5. Linux下Maven私服Nexus3.x环境构建操作记录

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79553747 私服介绍 私服是指私有服务器,是架设在局域网的一种特殊的远程仓库, ...

  6. Maven系列第9篇:多环境构建支持,核心开发必备!

    maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第9篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...

  7. 使用maven profile实现多环境可移植构建(转自CSDN)

    使用maven profile实现多环境可移植构建 标签: maven profilemaven自动构建maven自动部署maven可移植构建持续集成 2014-04-25 23:37 26905人阅 ...

  8. 使用maven profile实现多环境可移植构建

    mvn clean package -Pproduction即构建出生产环境需要的war包 mvn tomcat:redeploy -Ptest 即发布到测试环境 在开发过程中,我们的软件会面对不同的 ...

  9. maven属性、profile、资源过滤、不同环境构建项目

    maven针对不同环境构建项目 maven使用属性.profile及资源过滤支持针对不同环境构建项目 maven属性 maven共有六类属性 1.最常见的是自定义属性,即在pom文件里通过<pr ...

随机推荐

  1. linux 下 vi 编辑器 使用

    命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode) 1.进入插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插 ...

  2. 关于JNI调用从eclipse转到Android Studio遇到的问题(总结)

    将一个小应用从eclipse开发迁移到android studio,程序中有native代码实现,在eclipse是靠Android.mk这么个mk文件来组织编译的,但到android studio上 ...

  3. 介绍nodejs中的path模块的几个方法

    webpack中常用的: var path = require('path') 是nodejs中的path模块,介绍一下webpack中常用的几个path模块的方法: 应用node环境的时候,这个pa ...

  4. linux 将一个服务器上的文件或者文件夹复制到另一台服务器上

    使用scp将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上 复制文件或文件夹(目录)命令:  一.复制文件:  (1)将本地文件拷贝到远程  scp 文件名 用户名@计算机IP或者计 ...

  5. CentOS VNC

    CentOS Linux:1.需要安装的包:tigervnc,tigervnc-server 2.配置显示分辨率.桌面和用户:编辑 /etc/sysconfig/vncservers参考注释掉的最后两 ...

  6. Objekt Orientierte Programmierung C++

    1.Funtion Overloading C++ erlaubt,dass einige Funktion gleiches Names deklariert wird.Der Formale Pa ...

  7. XmlDocument.LoadXml和Load的区别

    LoadXml:从指定的字符串加载 XML 文档. eg:doc.LoadXml("<root>aa</root>"); .csharpcode, .csh ...

  8. [转]Repeat Page Header on each Page for reports SSRS

    本文转自:https://stackoverflow.com/questions/3475144/i-want-to-repeat-page-header-on-each-page-for-repor ...

  9. C# 类库下 读取不到config里节点的问题

    前提:要在当前项目下App.config配置信息里读取连接数据库的字符串.忘记创的是个类库.导致一直报错(对象未实例) 解决办法: 程序运行不会读取本项目下的app.config文件(实际它只是个模板 ...

  10. spring mongodb查询

    MongoRepository 查询条件 Keyword Sample Logical result After findByBirthdateAfter(Date date) {"birt ...