Правильный путь к applicationContext.xml с использованием ClassPathXmlApplicationContext

У меня есть рабочее веб-приложение с applicationContext.xml в WEB-INF/config/applicationContext.xml. Теперь мне нужно реализовать какой-то инструмент тестирования в качестве отдельного приложения, которое может использовать тот же applicationContext.xml, но у него есть проблема с путем к конфигурации для класса ClassPathXmlApplicationContext.

Я знаю, что когда я копирую applicationContext.xml в пакет по умолчанию (где находится.java), я могу использовать ClassPathXmlApplicationContext("applicationContext.xml"), но нужно ли это?

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AdminTool {

    private Logger log = Logger.getLogger(getClass());

    /** all below doesn't work - FileNotFoundException) **/
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml");
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml");
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml");

    public static void main(String[] args) {
        new AdminTool();
    }

    public AdminTool() {
        log.debug(ac);
    }

}

5 ответов

Решение

В локальном тестовом сценарии вы не находитесь внутри Jar, поэтому вам не нужен доступ на основе Classpath. использование FileSystemXmlApplicationContext вместо.

Вероятно, что-то вроде этого:

private static final ApplicationContext ac =
    new FileSystemXmlApplicationContext(
        "src/WEB-INF/config/applicationContext.xml"
    );

(пути относительны из каталога выполнения)

Это причина, почему я предпочитаю помещать все файлы конфигурации в папку классов. Фактически, используя Maven, вы можете поместить все эти файлы в src / main / resources. Затем в ваших тестовых файлах вы можете получить доступ как "classpath:applicationContext.xml".

private static final ApplicationContext ac =
    new FileSystemXmlApplicationContext(
        "/WEB-INF/config/applicationContext.xml"
    );
private static final ApplicationContext ac =
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml"
);

Перейдите к свойству>Java Build Path>Source вашего проекта, проверьте classpath и добавьте каталог перед WEB-INF в classpath. определенно это работа

Другие вопросы по тегам