假设我们拥有这样一个需求:
目前存在几套环境,我们需要对接每套环境中的API,但是每套环境的API地址、用户信息都不同。
解决方案:
如果我们使用 maven 可以直接通过不同的 profile 来实现。但是,我们这里将要介绍的并不是这种方案,而是通过在属性文件中,通过“${}”引用 maven 中定义的属性。
先看看我们的 pom.xml 文件,如下:
<build> <finalName>learn-maven-properties</finalName> <!-- 必须开启资源过滤 --> <!-- 只有我们开启资源过滤后,在 properties 文件中才能引用我们在 pom 文件中定义的属性 --> <resources> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <testResources> <testResource> <directory>${project.basedir}/src/test/resources</directory> <filtering>true</filtering> </testResource> </testResources> </build> <profiles> <profile> <id>default</id> <properties> <!-- 自定义属性 --> <maven-apiUrl>https://192.168.10.180:8080</maven-apiUrl> <maven-username>root</maven-username> <maven-password>aaaaaa</maven-password> </properties> <activation> <!-- 设置默认激活这个配置 --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>release</id> <properties> <!-- 自定义属性 --> <maven-apiUrl>https://10.87.11.228:8080</maven-apiUrl> <maven-username>root</maven-username> <maven-password>relase_password</maven-password> </properties> </profile> </profiles>
注意:上面的 resources 标签一定要配置,该标签用来过滤资源。maven 将会把属性文件中引用 pom.xml 文件中的属性,替换成实际的之。
属性配置文件内容如下:
app=learn-maven-properties version=1.0.0 ## 下面信息有maven profile动态设置 apiUrl=${maven-apiUrl} username=${maven-username} password=${maven-password}
java代码中使用这些属性:
package com.huangx.maven; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class LoadPropertyDataImpl { @Value("${app}") private String app; @Value("${version}") private String version; @Value("${apiUrl}") private String apiUrl; @Value("${username}") private String username; @Value("${password}") private String password; public void getData() { System.out.println("app = " + app); System.out.println("version = " + version); System.out.println("apiUrl = " + apiUrl); System.out.println("username = " + username); System.out.println("password = " + password); } }
然后,我们执行 maven 的 package 生命周期,打包项目,在进入到 target/classes 目录中,你会看见你的属性文件已经被替换了。
注意,这里的多环境解决方案目的是为了讲解怎样在属性文件中引用 pom.xml 文件中定义的属性。