Spring 属性文件引用pom文件的属性

本文将介绍怎样在Spring项目中,在属性文件(properties)中引用pom.xml文件中定义的属性,这些属性可以定义在不同的profile中。

假设我们拥有这样一个需求:

目前存在几套环境,我们需要对接每套环境中的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 文件中定义的属性。

不傲才以骄人,不以宠而作威。——诸葛亮
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号