Как использовать файл свойств с GlassFish - PullRequest
10 голосов
/ 10 февраля 2009

Я создаю веб-сервис, который работает в GlassFish, и я хочу иметь некоторые пользовательские свойства. Для этого я использую класс Properties. Код, который я использую:

Properties p=new Properties();
File f=new File(System.getProperty("user.dir"), "settings.properties");
p.load(new FileInputStream(f));  

Но как мне получить файл settings.properties в моем каталоге конфигурации?

Я не уверен насчет моего пути к классам, поскольку он управляется NetBeans и GlassFish. Я предполагаю, что мой .war -файл добавляется в путь к классам при развертывании ...

Я добавил свое собственное решение, но если бы кто-нибудь смог придумать лучшее решение, это было бы очень кстати ...

Ответы [ 8 ]

11 голосов
/ 07 января 2013

Поместите файлы своих свойств в каталог / glassfish / domains / / lib / classes , и они будут доступны изнутри ваши приложения через класс ResourceBundle . Например, добавьте файл свойств с именем settings.properties в этот каталог, а затем получите доступ к значениям из файла следующим образом:

ResourceBundle.getBundle ( "Настройки") GetString ( "моя-собственность-ключ");.

5 голосов
/ 19 марта 2009

Решение, которое работает, на самом деле довольно простое:

URL url =  this.getClass().getResource("/package/name/file.properties");
p = new Properties();
p.load(new FileInputStream(new File(url.getFile())));

Почему никто не пришел с этим?

3 голосов
/ 17 марта 2009

Альтернативы:

В зависимости от того, как настроен ваш домен, вы можете использовать asadmin create-system-properties из командной строки. Запустите / см. asadmin create-system-properties --help для получения дополнительной информации.

Или вам может потребоваться администрирование системных свойств через интерфейс администратора Glassfish. Вот ссылка по умолчанию: http://localhost:4848/configuration/systemProperties.jsf?configName=server-config

1 голос
/ 13 марта 2009

Я много пробовал, но решил это с помощью:

        // ServletContext ctx
        InputStream stream = ctx.getResourceAsStream("version.properties");
        p = new Properties();
        p.load(stream);

Я должен передать ServletContext со страницы jsp с вызовом getServletContext()getServletContext(). Не идеально, но это единственный способ заставить его работать ...

Было бы неплохо, если бы кто-нибудь мог придумать другое решение, которое могло бы работать без ServletContext.

1 голос
/ 10 февраля 2009

См. здесь , чтобы узнать, как можно прочитать файл свойств из вашего пути к классам:

URL url =  ClassLoader.getSystemResource("test.properties");
Properties p = new Properties();
p.load(new FileInputStream(new File(url.getFile())));

Вам нужно только добавить каталог конфигурации в путь к классам.

Если у вас возникли проблемы с использованием приведенного выше кода, попробуйте ServletContext.getResource .

0 голосов
/ 16 октября 2013

Имейте в виду, что вам нужно закрыть InputStream . В противном случае вы получите SocketException рано или поздно.

#|2013-xx-xxTxx:xx:xx.162+0200|WARNING|sun-appserver2.1|sun.rmi.transport.tcp|_ThreadID=431; _ThreadName=RMI TCP Accept-0;_RequestID=xyz;|RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=42384] throws
java.net.SocketException: Too many open files
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
    at java.lang.Thread.run(Thread.java:662)
|#]

Свойства загрузки

0 голосов
/ 10 августа 2012

Скопируйте ваш файл свойств в web / WEB-INF / classes path

Properties p=new Properties();
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myproperty.properties"));
0 голосов
/ 10 февраля 2009

+ 1 для помещения его в ваш путь к классу.

Если вы используете Spring (и я настоятельно рекомендую вам это сделать, если вы этого еще не сделали по многим причинам), когда вы можете загрузить файл свойств следующим образом:

database.username=scott
database.password=tiger

и поместите ссылки в контекст вашего приложения, например:

<property name="username" value="${database.username}"/>

(при условии, что вы настроили конфигуратор свойств), и это приведет к ошибке, если файл не может быть загружен или свойство не существует. Приложение не запустится. Это на самом деле хорошая вещь. Это позволяет вам действительно быстро находить проблемы и гораздо лучше, чем просто молчать, что иногда может привести к катастрофическим последствиям.

...