Ява.Ио.Исключение 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 4

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"));

И посмотрите, что было использовано в качестве записей пути к классу.