[英]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.