我正在使用maven项目,我在quartz.properties
文件夹中有一个/src/main/resources
文件。
现在我可以通过这个类的两种方式使用这个属性文件,如下所示:
/**
* 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
文件。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
您可以访问n
中的命令行参数:
props.load( new FileInputStream("quartz.properties") );
如果没有main
方法需要if(args.length > 0) {
...
factory.initialize(args[0]);
} else {
...
factory.initialize(App.class.getClassLoader().getResourceAsStream("quartz.properties"));
}
,那么您可以从参数中构造一个initialize
:
String
答案 1 :(得分:0)