如何通过Shell脚本将.property文件传入Java类?
嘿,我来分享几个靠谱的方案,帮你在Shell脚本里把服务器上的.properties文件传给你的Java程序,都是实际项目里常用的做法:
方法1:通过Java系统属性传递(最常用)
这种方式灵活度很高,你可以在启动Jar包时通过-D参数指定配置文件的绝对路径,然后在Java代码里读取这个系统属性。
Shell脚本示例
#!/bin/bash # 替换成你服务器上.properties文件的实际绝对路径 PROP_FILE="/opt/app/config/server-config.properties" # 启动Jar包,通过-D参数传递配置文件路径 java -Dconfig.file="$PROP_FILE" -jar your-application.jar
Java代码读取示例
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class AppMain { public static void main(String[] args) { // 获取通过-D传入的配置文件路径 String propFilePath = System.getProperty("config.file"); Properties props = new Properties(); try (InputStream inputStream = new FileInputStream(propFilePath)) { props.load(inputStream); // 读取具体配置项,比如数据库地址 String dbUrl = props.getProperty("database.url"); System.out.println("数据库地址:" + dbUrl); } catch (IOException e) { e.printStackTrace(); } } }
方法2:将配置文件加入类路径
如果你的配置文件可以放在固定的目录下,也可以把该目录加入Java的类路径,然后直接从类路径读取配置文件。
Shell脚本示例
#!/bin/bash # 假设配置文件在./config目录下,将该目录和Jar包一起加入类路径 java -cp "your-application.jar:/opt/app/config" com.your.package.AppMain
Java代码读取示例
import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class AppMain { public static void main(String[] args) { Properties props = new Properties(); // 从类路径读取配置文件(此时config.properties要在类路径目录下) try (InputStream inputStream = AppMain.class.getClassLoader().getResourceAsStream("config.properties")) { props.load(inputStream); String apiKey = props.getProperty("api.key"); System.out.println("API密钥:" + apiKey); } catch (IOException e) { e.printStackTrace(); } } }
方法3:通过命令行参数传递
直接把配置文件路径作为命令行参数传给Java程序的main方法,适合简单场景。
Shell脚本示例
#!/bin/bash PROP_FILE="/opt/app/config/server-config.properties" # 将配置文件路径作为参数传给Jar包 java -jar your-application.jar "$PROP_FILE"
Java代码读取示例
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class AppMain { public static void main(String[] args) { // 检查是否传入了参数 if (args.length == 0) { System.err.println("请传入配置文件路径作为参数"); System.exit(1); } String propFilePath = args[0]; Properties props = new Properties(); try (InputStream inputStream = new FileInputStream(propFilePath)) { props.load(inputStream); String logLevel = props.getProperty("logging.level"); System.out.println("日志级别:" + logLevel); } catch (IOException e) { e.printStackTrace(); } } }
小贴士:如果你的配置文件路径包含空格,一定要用双引号把路径包裹起来(比如"$PROP_FILE"),避免Shell解析出错哦!
内容的提问来源于stack exchange,提问作者Sambit Samal
相关产品推荐
相关产品推荐

