【maven】profile 配置不同环境

profile确实是一项很有用的功能,因为我们的项目的运行环境可以有几种,开发环境,测试环境,线上环境,意味着不同环境许多配置是不同的,比如数据库,缓存之类的。

如果不借助一些构建工具,那么我们需要每改变一个运行环境就修改一次项目的配置文件,这在大型项目中很不方便,因为每一次改动都有可能引入错误,众多的配置文件很有可能遗漏。其次开发也不方便,提交代码什么的需要注意配置文件。

但是借助了maven的prifile,我们就可以轻松应对项目的不同环境。下面是最近刚完成的一个小例子。

使用如下命令创建一个maven项目:

mvn archetype:generate

这个默认是用quick-start模板,所以在src/main没有resources目录,而我们的配置文件是要放在这个目录下的,所以,我们可以手动创建一个。



当然最开始没有target目录。默认情况下,maven的resources插件会把resources目录下的文件也打入jar中。

看一下这个配置文件,是一个数据库的例子:

database.jdbc.driverClass = ${db.driver}
database.jdbc.connectionURL = ${db.url}
database.jdbc.username = ${db.username}
database.jdbc.password = ${db.password}

注意这里并没有用明文,原因就是为了适用不同的环境。我们这里相当于只是定义了一个模板,具体的内容由相应的变量填充。这个叫做maven的资源过滤,需要我们在pom中配置一下,而这些变量的真实值也定义在pom中,当然不仅限于pom。

pom.xml:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.liyao</groupId>
  <artifactId>profile_test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>development</id>
      <properties>
        <db.driver>com.mysql.jdbc.Driver</db.driver>
        <db.url>jdbc:mysql://192.168.1.2/test</db.url>
        <db.username>development</db.username>
        <db.password>development-pwd</db.password>
      </properties>
    </profile>

    <profile>
      <id>production</id>
      <properties>
        <db.driver>com.mysql.jdbc.Driver</db.driver>
        <db.url>jdbc:mysql://192.168.1.2/production</db.url>
        <db.username>production</db.username>
        <db.password>production-pwd</db.password>
      </properties>
    </profile>
  </profiles>

  <build>
    <resources>
      <resource>
        <directory>${project.basedir}/src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

</project>

这里我们引入了一个junit的依赖,这个和例子无关。然后配置了profiles,profiles里定义了两个profile,每一个profile对应一种环境,每一个profile也有一个id,我们的模板里的内容就是在profile里定义,然后通过在构建时指明profile的id来决定启用哪一个profile。

然后我们使用mvn 命令构建,通过-P参数指定profile的id,比如:

mvn clean compile -Pdevelopment
mvn clean compile -Pproduction

运行后可以在classes目录下生成了一个内容被替换后的application.properties文件。

实际中,我们可以写一个不同的maven启动脚本来启动不同的环境。

当然这只是maven中激活profile的一种方法,即通过命令行参数给出profile的id。可是实现但是每一次运行都得给出参数。更好的做法是提供morning的选项。

那么我们可以:

1.在pom中而非prifile标签下定义properties。这样如果不指定profileid,就会使用pom中的默认值。

2.使用settings.xml,这个会放在用户目录下,我们可以定义其activeProfiles属性,里面是默认的激活profile。我们知道settings.xml是针对用户所有项目的,所以这个是一个很好的办法,因为开发人员不同项目的环境名字一般都是一样的,这样配置一份settings.xml就可以针对所有的项目使用,很方便,而且不需要额外给定参数。在本机是测试环境,在线上是线上环境。例如:

  <activeProfiles>
    <activeProfile>developemnt</activeProfile>
  </activeProfiles>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值