簡體   English   中英

如何使用GlassFish的屬性文件

[英]How to use a property-file with GlassFish

我正在創建一個在GlassFish中運行的Web服務,我想要一些自定義屬性。 為此,我正在使用Properties類。 我正在使用的代碼是:

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

但是如何在我的config目錄中獲取settings.properties -file?

我不確定我的類路徑,因為它由NetBeans和GlassFish管理。 我假設我的.war -file被添加到類路徑中,部署時...

我已經添加了自己的解決方案,但如果有人能提出更好的解決方案,那將非常受歡迎......

將屬性文件放在<glassfish-install-dir> / glassfish / domains / <domain-name> / lib / classes目錄中,可以通過ResourceBundle類從應用程序中訪問它們。 例如,將名為settings.properties的屬性文件添加到此目錄,然后從文件中訪問值,如下所示:

ResourceBundle.getBundle(“設置”)的getString(“我的屬性鍵”)。

有效的解決方案實際上非常簡單:

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

為什么沒有人來這個?

備擇方案:

根據域的配置方式,您可以從命令行使用asadmin create-system-properties 運行/請參閱asadmin create-system-properties --help以獲取更多信息。

或者您可能希望通過Glassfish管理界面管理系統屬性。 這是默認鏈接: http:// localhost:4848 / configuration / systemProperties.jsf?configName = server-config

請參閱此處了解如何從類路徑中讀取屬性文件:

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

然后,您只需要將配置目錄添加到類路徑中。

如果您在使用上述代碼時遇到問題,請嘗試使用ServletContext.getResource

我已經嘗試了很多,但我解決了這個問題:

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

我必須通過調用getServletContext()getServletContext()從jsp頁面傳遞ServletContext。 不理想,但這是我能讓它發揮作用的唯一方法......

如果有人能想出另一個解決方案,那將是很好的,可以使用ServletContext

將屬性文件復制到web / WEB-INF / classes路徑

Properties p=new Properties();
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("myproperty.properties"));

請注意,您必須關閉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)
|#]

加載屬性

+1將它放入類路徑中。

如果您正在使用Spring(並且我強烈建議您這樣做,如果您還沒有出於多種原因),那么您可以加載這樣的屬性文件:

database.username=scott
database.password=tiger

並將引用放在您的應用程序上下文中:

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

(假設您已配置了屬性配置程序),如果無法加載文件或該屬性不存在,則會導致錯誤。 應用程序將無法啟動。 這實際上是件好事。 它可以讓您真正快速地發現問題,並且比默默地失敗更好,這有時會帶來災難性后果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM