Java: Доступ к файлу свойств внутри войны - PullRequest
8 голосов
/ 20 июля 2010

Я уже искал в 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?если так то как?

Спасибо

Ответы [ 6 ]

8 голосов
/ 20 июля 2010
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));

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

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

Спасибо за вашу помощь.

7 голосов
/ 20 июля 2010

Если вы находитесь на войне, ваш «classpath» classpath будет «WEB-INF / classes».Просто поднимитесь на два уровня.

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

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

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

getResourceAsStream("../../com.company.config/configfile.properties");
3 голосов
/ 16 июня 2011

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

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

1 голос
/ 20 июля 2010

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

0 голосов
/ 20 июня 2011

Поскольку вы используете 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">
0 голосов
/ 20 июля 2010

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

...