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