如何在Java中配置开发/生产等环境(无需Spring/Maven)
Java多环境配置:无框架实现指南
一、先理清核心概念:为什么搜不到你要的内容
你搜「java environment variables」出来的都是系统级配置(比如JAVA_HOME),是因为混淆了两个不同层面的概念:
- 系统级环境变量:操作系统提供给Java进程的全局参数,用来告诉系统Java的安装路径、全局依赖位置等,属于进程启动前的全局设置。
- 应用级多环境配置:是应用自身根据运行场景(开发/生产)加载的自定义参数,和系统环境变量完全是两回事——你应该搜「Java application environment-specific configuration」这类关键词才对。
Java本身没有内置的“多环境配置”机制,但可以通过系统属性、资源加载这两个基础能力,自己实现类似JS的.env文件效果。
二、官方文档获取途径
不用去外网,JDK自带的本地文档就能找到核心内容:
- 打开JDK安装目录下的
docs/api文件夹,直接用浏览器打开index.html,就能查看所有核心类的官方说明。 - 重点看这几个类的文档:
java.lang.System:掌握getProperty()(读取系统参数)、getenv()(读取操作系统环境变量)方法。java.util.Properties:了解如何加载、读取键值对配置文件。
三、无框架实现多环境配置(类似JS的.env)
直接上可落地的步骤,完全不用Spring/Maven这类工具:
1. 准备配置文件
在项目的资源目录(比如src/main/resources)下创建3个配置文件:
config.properties:默认兜底配置(当指定环境的文件不存在时用)config.dev.properties:开发环境配置config.prod.properties:生产环境配置
每个文件里写键值对,比如:
# config.dev.properties db.path=./dev_db.sqlite
# config.prod.properties db.path=/opt/app/prod_db.sqlite
2. 启动时指定环境
启动Java程序时,通过系统参数指定当前环境:
# 开发环境启动 java -jar your-app.jar -Denv=dev # 生产环境启动 java -jar your-app.jar -Denv=prod
如果不想用系统参数,也可以用操作系统环境变量:
# Linux/macOS export APP_ENV=prod && java -jar your-app.jar # Windows set APP_ENV=prod && java -jar your-app.jar
3. 写一个配置加载工具类
这个类负责根据指定的环境,自动加载对应的配置文件:
import java.io.InputStream; import java.util.Properties; public class ConfigLoader { private static final Properties props = new Properties(); static { // 优先读系统参数,没有的话读环境变量,默认用dev String env = System.getProperty("env"); if (env == null || env.isEmpty()) { env = System.getenv("APP_ENV"); env = env == null ? "dev" : env; } // 加载对应环境的配置文件 String configFile = "config." + env + ".properties"; try (InputStream is = ConfigLoader.class.getClassLoader().getResourceAsStream(configFile)) { if (is != null) { props.load(is); } else { // 环境文件不存在时加载默认配置 try (InputStream defaultIs = ConfigLoader.class.getClassLoader().getResourceAsStream("config.properties")) { if (defaultIs != null) { props.load(defaultIs); } } } } catch (Exception e) { e.printStackTrace(); } } // 对外提供获取配置的方法 public static String get(String key) { return props.getProperty(key); } }
4. 在代码中使用配置
直接调用工具类获取参数就行:
public class Main { public static void main(String[] args) { String dbPath = ConfigLoader.get("db.path"); System.out.println("当前数据库路径:" + dbPath); // 这里写初始化嵌入式数据库的逻辑... } }
内容的提问来源于stack exchange,提问作者vktop
相关产品推荐
相关产品推荐

