Наше приложение должно использовать файл .properties
, который создается во время развертывания в файловой системе хоста, поэтому он не связывается с приложением .war
во время сборки.Он открывается и читается классом загрузчика во время создания контекста приложения Spring
<bean id="propertiesLoader" class="com....PropertiesLoader">
<property name="propertiesFileLocation" value="${PROPERTIES_FILE_LOCATION}"/>
...
, где значение пути файла PROPERTIES_FILE_LOCATION
определено в файле application.properties
в src\main\resources
* 1009 приложения* модуль maven
PROPERTIES_FILE_LOCATION=/home/.../propertyfilename.properties
и тип поля propertiesFileLocation
String
, доступ к которому осуществляется через new FileInputStream(propertiesFileLocation)
в PropertiesLoader.java
class
При этой настройке приложениесоздание контекста прошло успешно.Тем не менее, у нас также есть некоторые интеграционные тесты в нашем проекте, которые также настраивают Spring-контекст для их выполнения.Тем не менее, мы сохраняем копию файла propertyfilename.properties
в src\test\resources
модуля -it
maven и ссылаемся на него из it.properties
как
PROPERTIES_FILE_LOCATION=classpath:somedirectory/propertyfilename.properties
, однако во время создания контекста интеграционного теста мыполучите следующее исключение
[ERROR] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'propertiesLoader' defined in URL
[ERROR] Caused by: java.io.FileNotFoundException: classpath:somedirectory\propertyfilename.properties
(The filename, directory name, or volume label syntax is incorrect)
Теперь, если мы изменим тип поля propertiesFileLocation
на org.springframework.core.io.Resource
и получим к нему доступ через propertiesFileLocation.getInputStream()
в PropertiesLoader.java
, что сделает успешным создание контекста интеграционных тестов, но в то же самое время создание реального контекста приложения завершается неудачно с
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'propertiesLoader' defined in URL
[file:/.../tomcat/work/Catalina/localhost/_/loader/conf/spring/springmvc/springmvc-util.xml]: Invocation of init method failed;
nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/home/.../propertyfilename.properties]
Это кажется «тупиковой» ситуацией, поскольку создание приложения или контекста интеграционного теста завершается неудачно.Есть ли способ, которым оба контекста могут быть успешно созданы?