Java: доступ к файлу свойств внутри войны

Я уже обыскал StackOverflow для "свойств внутри войны", но ни один из результатов не работал для моего случая.

Я использую Eclipse Galileo и GlassFish v3 для разработки набора веб-сервисов. Я использую "динамический веб-проект" со следующей структурой

Src
-java_code_pkg_1
-java_code_pkg_2
-com.company.config
--configfile.properties WebContent
-META-INF
-WEB-INF
--log4jProperties
--web.xml
--applicationContext.xml
--app-servlet.xml

Я хочу получить доступ к "configfile.properties" внутри одного из исходных файлов в "java_code_pkg1". Я использую Spring Framework, и этот файл будет создан после запуска приложения на сервере.

Я пробовал следующее без везения

getResourceAsStream("/com.company.config/configfile.properties");
getResourceAsStream("/com/company/config/configfile.properties");
getResourceAsStream("com/company/config/configfile.properties");
getResourceAsStream("/configfile.properties");
getResourceAsStream("configfile.properties");

getResourceBundle(..) didn't work either.

Можно ли получить доступ к файлу, если он не находится по пути WEB-INF/classes? если да, то как?

Спасибо

Ответы

Ответ 1

Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));

работает, когда я в режиме отладки. Я могу видеть значения в отладчике, но я получаю исключение NullPointerException сразу после выполнения строки "props.load" и перед тем, как идти в свет под ним.

Это другая проблема. По крайней мере, теперь я знаю, что это способ получить доступ к конфигурационному файлу.

Благодарим вас за помощь.

Ответ 2

Если вы находитесь в состоянии войны, ваш текущий путь к классам - это "WEB-INF/classes". Просто поднимитесь на два уровня.

getResourceAsStream("../../com/company/config/configfile.properties");

Это ужасно, но оно работает. По крайней мере, он работает под tomcat, jboss и geronimo, и он работает сегодня.

P.S. Структура вашего каталога не очень ясна. Возможно, это:

getResourceAsStream("../../com.company.config/configfile.properties");

Ответ 3

Проверьте расположение файла свойств в файле WAR. Если он находится в каталоге WEB-INF/classes в каталоге com/company/config getResourceAsStream("com/company/config/configfile.properties") должен работать или getResourceAsStream ("Это должно работать, если файл конфигурации не находится под WEB-INF/classes directoy

Также попробуйте использовать getClass(). getClassLoader(). getResourceAsStream.

Ответ 4

Вы уверены, что файл включен в ваш военный файл? Много раз, процесс построения войны отфильтровывает неклассические файлы.

Ответ 5

Каков путь после развертывания на сервере? Можно использовать сканер для ручного чтения в ресурсе. Из файла java в пакете создание нового файла ( "../applications/" ) даст вам файл, указанный в {glassfish install}\domains\{domain name}\applications. Может быть, вы можете изменить этот путь к файлу, чтобы направить вас туда, куда вам нужно идти?

Ответ 6

Поскольку вы используете Spring, затем используйте поддержку ресурсов в Spring, чтобы напрямую вставлять файлы свойств.

см. http://static.springsource.org/spring/docs/3.0.x/reference/resources.html

Даже если класс, для которого требуется файл свойств, не управляется Spring, вы все равно можете получить доступ к ApplicationContext и использовать его для загрузки ресурса

ресурс будет чем-то вроде classpath: settings.properties, предполагая, что ваш файл свойств получил вашу сборку и упал в военном файле.

Вы также можете вводить непосредственно из документов:

<property name="template" value="classpath:some/resource/path/myTemplate.txt">