Правильный путь к 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. определенно это работа