Ява.Ио.Исключение filenotfoundexception: путь к классу ресурс [веб-инф/классов/библиотек.свойства] не может быть открыт, потому что он не существует
В моем приложении Spring у меня есть простой файл свойств, расположенный в папке WEB-INFclasses
, так что он, DispatcherServlet
и различные другие конфигурационные файлы находятся в папке classpath
.
Файл реквизитов определяется в DispatcherServlet
следующим образом:
<bean id="propertiesFactory" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location">
<value>/WEB-INF/classes/library.properties</value>
</property>
</bean>
Боб propertiesFactory
вводится в контроллер:
@Autowired
private Properties propertiesFactory;
И используется в одном из методов контроллера как:
if (adminPassword.equals(propertiesFactory.getProperty("adminPassword"))) {
Все это прекрасно работает, за исключением тестовой программы, которая имеет строку:
ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("library-servlet.xml");
Который бросает BeanCreationException
:
Injection of autowired dependencies failed
Из-за:
java.io.FileNotFoundException: class path resource [WEB-INF/classes/library.properties] cannot be opened because it does not exist
Но если все приложение может видеть файл props, то почему не эта программа?
1 ответ:
Все в
WEB-INF/classes
добавляется к корню пути класса. Таким образом, вы должны ссылаться на свой ресурс просто какlibrary.properties
Или еще лучше
classpath:library.properties
В
<property name="location"> <value>classpath:library.properties</value> </property>
Возможно, вам будет полезно запустить
System.out.println(System.getProperty("java.class.path"));
И посмотрите, что было использовано в качестве записей пути к классу.