如何为Maven构建的纯Java项目配置多环境数据库参数?
针对你的需求,这里提供几个贴近你熟悉的Django/.NET配置习惯的方案,完全替代硬编码:
1. Properties配置文件 + Maven资源过滤(最常用,适配Maven生态)
这个思路类似.NET的appsettings,通过多环境配置文件配合Maven的资源过滤,打包时自动切换对应环境的参数。
第一步:在
src/main/resources下创建多环境数据库配置文件db-dev.properties:db.ip=123 db.username=dev123 db.password=dev123db-qa.properties:db.ip=345 db.username=Qa123 db.password=Qa123
再建一个通用的
db.properties,用来关联当前激活的环境:# 这个文件会被Maven自动替换为对应环境的参数 db.ip=${db.ip} db.username=${db.username} db.password=${db.password}第二步:配置pom.xml的Profiles和资源过滤
在pom.xml里定义Dev、QA两个Profile,每个Profile对应一套数据库参数,同时开启资源过滤让Maven替换db.properties里的变量:<profiles> <profile> <id>dev</id> <properties> <db.ip>123</db.ip> <db.username>dev123</db.username> <db.password>dev123</db.password> </properties> <activation> <activeByDefault>true</activeByDefault> <!-- 默认激活Dev环境 --> </activation> </profile> <profile> <id>qa</id> <properties> <db.ip>345</db.ip> <db.username>Qa123</db.username> <db.password>Qa123</db.password> </properties> </profile> </profiles> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <!-- 开启变量替换 --> <includes> <include>db.properties</include> <!-- 只替换这个文件 --> </includes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>db-*.properties</exclude> <!-- 打包时排除多环境文件 --> </excludes> </resource> </resources> </build>第三步:Java代码读取配置
用原生Java的Properties类读取db.properties即可:import java.io.InputStream; import java.util.Properties; public class DBConfig { private static final Properties DB_PROPS = new Properties(); static { try (InputStream is = DBConfig.class.getClassLoader().getResourceAsStream("db.properties")) { DB_PROPS.load(is); } catch (Exception e) { throw new RuntimeException("加载数据库配置失败", e); } } public static String getDbIp() { return DB_PROPS.getProperty("db.ip"); } public static String getDbUsername() { return DB_PROPS.getProperty("db.username"); } public static String getDbPassword() { return DB_PROPS.getProperty("db.password"); } }打包时指定环境:比如打QA包就执行
mvn clean package -P qa,生成的jar包里db.properties就是QA环境的参数。
2. .env文件方案(和Django习惯完全一致)
用Java版的dotenv库直接读取.env文件,完全贴合你用Django的配置习惯。
第一步:添加Maven依赖
在pom.xml里引入java-dotenv库:<dependency> <groupId>io.github.cdimascio</groupId> <artifactId>java-dotenv</artifactId> <version>5.2.2</version> </dependency>第二步:创建多环境.env文件
在项目根目录下创建:.env.dev:DB_IP=123 DB_USERNAME=dev123 DB_PASSWORD=dev123.env.qa:DB_IP=345 DB_USERNAME=Qa123 DB_PASSWORD=Qa123
第三步:Java代码读取配置
通过系统环境变量指定要加载的.env文件,默认用Dev:import io.github.cdimascio.dotenv.Dotenv; public class DBConfig { private static final Dotenv DOT_ENV; static { // 从系统环境变量获取当前环境,默认dev String activeEnv = System.getenv("ACTIVE_ENV"); if (activeEnv == null || activeEnv.isBlank()) { activeEnv = "dev"; } // 加载对应环境的.env文件 DOT_ENV = Dotenv.configure() .filename(".env." + activeEnv) .load(); } public static String getDbIp() { return DOT_ENV.get("DB_IP"); } public static String getDbUsername() { return DOT_ENV.get("DB_USERNAME"); } public static String getDbPassword() { return DOT_ENV.get("DB_PASSWORD"); } }启动时指定环境:比如QA环境启动就执行
ACTIVE_ENV=qa java -jar your-project.jar,或者用JVM参数java -jar your-project.jar -DACTIVE_ENV=qa。
3. Spring Boot配置(可选,适合能引入Spring的项目)
如果你的项目可以引入Spring Boot,它的多环境配置非常成熟,和.NET的appsettings逻辑几乎一致:
- 在
src/main/resources下创建application-dev.properties、application-qa.properties,分别写入对应环境的数据库参数。 - 启动时通过
--spring.profiles.active=dev或--spring.profiles.active=qa指定环境,Spring会自动加载对应配置。 - 代码里用
@Value("${db.ip}")或者@ConfigurationProperties注解直接注入参数。
如果是纯Java项目不想引入Spring,前两个方案更合适。
内容的提问来源于stack exchange,提问作者Jack

