pom.xml使用多套环境及变量获取

一般来说,开发、测试、生产的环境都不一样,反复修改配置文件比较麻烦,还容易出错,项目在pom.xml文件中使用了profiles属性,配置了多套环境,有两个比较关键的问题
  • 以下是pom.xml文件中相关代码
    <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>      <jdbc.url>jdbc:mysql://127.0.0.1:3306/test</jdbc.url>
                <jdbc.username>test</jdbc.username>
                <jdbc.password>test</jdbc.password>
                <redis.nodes>127.0.0.1:9000</redis.nodes>
            </properties>
        </profile>
        <profile>
            <id>sa</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <jdbc.url>#{jdbc.url}</jdbc.url>
                <jdbc.username>#{jdbc.username}</jdbc.username>
                <jdbc.password>#{jdbc.password}</jdbc.password>
                <redis.nodes>#{redis.nodes}</redis.nodes>
            </properties>
        </profile>
    </profiles>
  • 部署时如何选择环境?
  • 使用maven打包时,idea上选择对应环境即可
  • 代码中需要使用这些变量时,如何获取?
  • 其实有很多种方法,我提供一种比较偷懒的法子,在Spring配置文件中定义Bean,然后建立相关类,这样spring框架会自动注入这个类,代码如下
    <bean id="Variables" class="com.util.Variables">
        <property name="redis_nodes" value="${redis.nodes}"/>
    </bean>
public class Variables {
    static String redis_nodes;

    public static String getRedis_nodes() {
        return redis_nodes;
    }

    public void setRedis_nodes(String redis_nodes) {
        this.redis_nodes = redis_nodes;
    }
}
  • 出于安全考虑,线上环境的一些参数,并不会直接写到pom文件中,而是在部署时,通过docker替换;
  • 测试环境,部署的时候用的也是pom文件下的生产环境,只是在替换时,用的测试环境参数;
  • 这样做的好处是进一步确保上线安全,之前有过生产环境参数和测试环境参数不一致的情况
在 `pom.xml` 中读取环境变量可以通过 `${env.VARIABLE_NAME}` 的语法实现。这种占位符会被 Maven 替换为实际的系统环境变量值[^1]。 下面是一个具体的示例,展示如何在 `pom.xml` 文件读取环境变量并将其用于配置: ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>example-project</artifactId> <version>1.0-SNAPSHOT</version> <!-- 读取环境变量 --> <properties> <!-- 读取 JAVA_HOME 环境变量 --> <java.home>${env.JAVA_HOME}</java.home> <!-- 如果需要默认值,可以这样设置 --> <custom.env.var>${env.CUSTOM_ENV_VAR:-defaultValue}</custom.env.var> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>validate</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <echo message="Java Home is set to ${java.home}"/> <echo message="Custom Environment Variable is set to ${custom.env.var}"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> ``` 在这个例子中: - `${env.JAVA_HOME}` 被用来获取系统的 `JAVA_HOME` 环境变量[^3]。 - `${env.CUSTOM_ENV_VAR:-defaultValue}` 表示如果 `CUSTOM_ENV_VAR` 环境变量未定义,则使用默认值 `defaultValue`[^5]。 需要注意的是,当运行 Maven 构建时,确保目标环境中已经设置了相应的环境变量,否则可能会导致构建失败或无法正确替换占位符[^4]。 ### 注意事项 - 如果某些环境变量仅存在于特定的操作系统中(如 Windows 或 Linux),则可能需要额外处理跨平台兼容性问题。 - 当前用户的权限决定了能够访问哪些环境变量。因此,在企业级项目中部署时需特别注意安全性问题[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值