[英]load external file from command prompt instead of using from classpath
我正在使用Maven项目,并且在/src/main/resources
文件夹中有一个quartz.properties
文件。
现在,可以从此类中以两种方式使用此属性文件,如下所示:
/**
* Create a StdSchedulerFactory that has been initialized via
* <code>{@link #initialize(Properties)}</code>.
*
* @see #initialize(Properties)
*/
public StdSchedulerFactory(Properties props) throws SchedulerException {
initialize(props);
}
/**
* Create a StdSchedulerFactory that has been initialized via
* <code>{@link #initialize(String)}</code>.
*
* @see #initialize(String)
*/
public StdSchedulerFactory(String fileName) throws SchedulerException {
initialize(fileName);
}
现在,我使用maven-shade-plugin
制作了一个可执行jar,并且在我的ubuntu框中以java -jar abc.jar
身份运行,并且工作正常。 它会自动使用classpath中的quartz.properties
文件。
public static void main(String[] args) {
StdSchedulerFactory factory = new StdSchedulerFactory();
try {
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
Scheduler scheduler = factory.getScheduler();
scheduler.start();
} catch (SchedulerException ex) {
System.out.println("error= " + ex);
}
}
现在,我试图通过运行上面的jar文件时从命令提示符处传递quartz.properties
文件,使该程序更通用,如下所示:
java -jar abc.jar quartz.properties
如果我像上面那样,那么它应该使用我传递的,而不是从类路径传递的quartz.properties
文件,但是如果没有传递任何参数,则应该使用默认的quartz.properties
文件。 实现此目标的最佳方法是什么?
您可以访问main
的命令行参数:
if(args.length > 0) {
...
factory.initialize(args[0]);
} else {
...
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
}
如果没有采用String
initialize
方法,则可以根据参数构造FileInputStream
:
factory.initialize(new FileInputStream(new File(args[0])));
检查API 。
props.load( new FileInputStream("quartz.properties") );
PS。 使用try-with-resources,这样您就不会像我上面那样泄漏流,并添加错误处理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.