Java: Доступ к файлу свойств внутри войны
Я уже искал в Stackru "свойства внутри войны", но ни один из результатов не помог мне.
Я использую 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? если так то как?
Спасибо
6 ответов
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));
работает, когда я в режиме отладки. Я могу видеть значения в отладчике, но я получаю исключение NullPointerException сразу после выполнения строки "props.load" и перед переходом к свету под ней.
Это другая проблема. По крайней мере, теперь я знаю, что это способ доступа к файлу конфигурации.
Спасибо за помощь.
Если вы находитесь на войне, ваш "classpath "classpath - "WEB-INF/classes". Просто поднимитесь на два уровня.
getResourceAsStream("../../com/company/config/configfile.properties");
Это ужасно, но это работает. По крайней мере, он работает под tomcat, jboss и geronimo и работает сегодня.
PS Ваша структура каталогов не очень понятна. Возможно, это:
getResourceAsStream("../../com.company.config/configfile.properties");
Проверьте расположение файла свойств в файле WAR. Если он находится в каталоге WEB-INF/classes в каталоге com/company/configgetResourceAsStream("com/company/config/configfile.properties")
должно работать или getResourceAsStream("Это должно работать, если файл конфигурации не находится в директории WEB-INF/classes
Также попробуйте использовать getClass(). GetClassLoader(). GetResourceAsStream.
Вы уверены, что файл включен в ваш военный файл? Много раз, процесс сборки войны отфильтровывает файлы не.class.
Каков путь после его развертывания на сервере? Можно использовать сканер для чтения вручную на ресурсе. Из java-файла в пакете, создание нового файла ("../ Applications/") даст вам файл, указанный как {glassfish install}\domains\{domain name}\ Applications. Может быть, вы могли бы изменить этот путь к файлу, чтобы направить вас туда, куда вам нужно?
Поскольку вы используете Spring, используйте поддержку ресурсов в Spring для непосредственного добавления файлов свойств.
см. http://static.springsource.org/spring/docs/3.0.x/reference/resources.html
Даже если класс, для которого требуется файл свойств, не управляется Spring, вы все равно можете получить доступ к ApplicationContext и использовать его для загрузки ресурса.
ресурс будет выглядеть примерно так: classpath: settings.properties, если предположить, что ваш файл свойств был выбран вашей сборкой и помещен в файл war.
Вы также можете ввести непосредственно из документов:
<property name="template" value="classpath:some/resource/path/myTemplate.txt">