Как мне использовать файл свойств с jax-rs?

#java #tomcat #properties #jax-rs

#java #tomcat #свойства #jax-rs

Вопрос:

Я только начал настраивать веб-службу с jax-rs, работающую на Tomcat. Есть ли способ связать файл свойств с моим java-проектом (в eclipse), чтобы я мог считывать из него свойства во время выполнения? Также, если это возможно, где было бы лучшее место для его размещения (чтобы его нельзя было увидеть по URL), WebContent, WEB-INF и т. Д.?

Спасибо.

Комментарии:

1. Просто поместите его в classpath (WEB-INF/classes; в проекте maven src/resources является подходящим местоположением) и загрузите его с помощью classloader.

2. У меня нет проекта maven, будет ли достаточно WEB-INF / lib? Как будет выглядеть путь во время выполнения для свойств файла («WEB-INF / lib /jaxrs.properties»)

Ответ №1:

Несколько вариантов:

Вариант 1: вы можете поместить его в свой путь к классу (в Eclipse поместите его в папку и исходный код), чтобы вы могли получить к нему доступ через Classloader: MyClass.class.getResourceAsStream("myproperties.properites")

Обратите внимание, что MyClass также должен находиться в той же исходной папке (на самом деле это немного сложнее, он должен находиться в той же иерархии classloader, но любой класс из той же папки выполнит эту работу)

Вариант 2: поместите его в папку WEB-INF. Это предпочтительный вариант, поскольку вам не нужно иметь дело с classpath . Для доступа к нему вам понадобится ServletContext: javax.servlet.ServletContext.getResourceAsStream("WEB-INF/myproperties.properites")

В jax-rs вы можете получить ServletContext, используя аннотацию @Context в любом зарегистрированном ресурсе или поставщике.

Комментарии:

1. Если мой класс не является возвращаемым классом ресурсов, а скорее создается POJO (extends Authenticator), нужно ли мне физически передавать контекст сервлета из ресурса в его конструктор или через сеттер, или есть способ внедрить его туда?

2. Ну, если класс не создается с помощью JAX-RS, то JAX_RS вам здесь не поможет. Вам нужно будет сделать это вручную.

3. Я должен был сделать что-то вроде Someclass.class.getResourceAsStream(«.. / ../file.properties»), но это нужно будет изменить, если класс находится в другом пакете. Есть ли способ указать абсолютный путь к файлу, т.Е. /src/file.properties или что-то в этом роде?

4. Просто поместите файл свойств в корневой пакет, чтобы вы всегда могли написать: Someclass.class.getResourceAsStream(«file.properties»)

5. Как насчет случая, когда мне нужно записать файл?

Ответ №2:

Для пользователей GlassFish 3.1 я смог заставить работать оба параметра Tarlog, но мне пришлось использовать абсолютный путь к файлу. Для варианта 1 я поместил файл в папку исходных пакетов в NetBeans, к которой я затем мог получить доступ через:

 InputStream is = TestResource.class.getResourceAsStream("/test_model.js");
  

Для варианта 2 я поместил файл в WEB-INF и использовал:

 @Context ServletContext servletContext;
InputStream is = servletContext.getResourceAsStream("/WEB-INF/test_model.js");
  

Без косой черты результат был нулевым. HTH

Комментарии:

1. Есть ли способ использовать файл свойств или какой-либо пользовательский файл настроек для моей войны, который будет загружен при запуске, но не находится внутри проекта? например, /etc/myapp/file.conf