如何从代码中动态查找属性文件的路径?

时间:2015-09-08 20:09:35

标签: java properties quartz-scheduler

我在Java中有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);
}

我不确定如何使用StdSchedulerFactory类来提供quartz.properties文件的路径。

截至目前,我正在提供这样的硬编码路径,但这不是提供路径的正确方法,因为如果其他人在他们的桌面或笔记本电脑上运行此代码那么它将无法工作。我将从我的桌面运行这个应用程序,我也将制作一个可运行的jar,所以我希望我的程序应该动态加载我的属性文件而不需要任何硬编码路径。

public class TestingQuartz {
    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory factory = new StdSchedulerFactory(
                "C:\\workspace\\tester_quartz\\quartzmain\\src\\main\\resources\\quartz.properties");
        Scheduler scheduler = factory.getScheduler();
        scheduler.start();
    }
}

2 个答案:

答案 0 :(得分:2)

由于您的配置文件位于mavenized项目的src / main / resources中,因此它将嵌入您使用maven构建的生成工件(jar,war ...)中。因此,您应该像这样“从类路径”加载文件:

    StdSchedulerFactory factory = new StdSchedulerFactory();
    factory.initialize(this.getClass().getClassLoader().getResourceAsStream("quartz.properties"));

答案 1 :(得分:0)

由于它似乎在你的课程路径上,你可以这样做:

getClass().getClassLoader().getResource("quartz.properties").toExternalForm()