You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在非Spring环境下用环境变量替换persistence.xml中的账号密码

替换persistence.xml硬编码凭据为环境变量的方案

针对你的非Spring+Hibernate JPA项目,这里提供两种可行的方案来替换persistence.xml中的硬编码用户名和密码:

方案一:代码动态注入环境变量

直接在创建EntityManagerFactory时,通过代码读取环境变量并覆盖persistence.xml中的属性,这是最直接且无需修改构建配置的方式。

步骤:

  1. 保留persistence.xml中的其他配置,可将用户和密码的value留空或保留默认值(代码会覆盖):
<!-- persistence.xml中修改这两行 -->
<property name="javax.persistence.jdbc.user" value=""/>
<property name="javax.persistence.jdbc.password" value=""/>
  1. 在创建EntityManagerFactory的代码中,读取环境变量并传入Properties:
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.Properties;

public class HibernateUtil {
    private static final EntityManagerFactory emf;

    static {
        try {
            Properties props = new Properties();
            // 读取环境变量
            String dbUser = System.getenv("DB_USER");
            String dbPassword = System.getenv("DB_PASSWORD");
            
            props.put("javax.persistence.jdbc.user", dbUser);
            props.put("javax.persistence.jdbc.password", dbPassword);
            
            // 传入persistence单元名称和自定义属性
            emf = Persistence.createEntityManagerFactory("com.zegasoftware.jpa", props);
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static EntityManagerFactory getEntityManagerFactory() {
        return emf;
    }
}
  1. 运行项目前设置环境变量:
  • Linux/macOS终端:
export DB_USER=你的用户名
export DB_PASSWORD=你的密码
java -jar 你的项目.jar
  • Windows命令行:
set DB_USER=你的用户名
set DB_PASSWORD=你的密码
java -jar 你的项目.jar

方案二:Maven资源过滤构建时替换

利用Maven的资源过滤功能,在构建阶段将persistence.xml中的占位符替换为环境变量的值,适合需要打包后直接运行的场景。

步骤:

  1. 修改persistence.xml,将用户名和密码替换为Maven占位符:
<property name="javax.persistence.jdbc.user" value="${db.user}"/>
<property name="javax.persistence.jdbc.password" value="${db.password}"/>
  1. 在pom.xml中配置资源过滤,开启对persistence.xml的变量替换:
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <!-- 只过滤persistence.xml,避免影响其他资源文件 -->
            <includes>
                <include>META-INF/persistence.xml</include>
            </includes>
        </resource>
        <!-- 其他资源文件不开启过滤 -->
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>META-INF/persistence.xml</exclude>
            </excludes>
        </resource>
    </resources>
</build>
  1. 构建项目时通过环境变量传入值:
  • Linux/macOS:
mvn clean package -Ddb.user=$(echo $DB_USER) -Ddb.password=$(echo $DB_PASSWORD)
  • Windows:
mvn clean package -Ddb.user=%DB_USER% -Ddb.password=%DB_PASSWORD%

也可以在pom.xml的properties中设置默认值,构建时通过命令行覆盖:

<properties>
    <!-- 可选默认值 -->
    <db.user>postgres</db.user>
    <db.password>默认密码</db.password>
</properties>

注意事项

  • 方案一适合开发阶段快速测试,无需修改构建流程;方案二更适合生产环境打包部署,确保配置不硬编码在代码中。
  • 确保环境变量已正确设置,避免空值导致数据库连接失败。

内容的提问来源于stack exchange,提问作者Cosmin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:24:30