如何使用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被添加到类路径中,部署时…
我已经添加了自己的解决方案,但如果有人能提出更好的解决方案,那将非常受欢迎……
将属性文件放在
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())));
然后,您只需要将config目录添加到类路径中。
如果您在使用上述代码时遇到问题,请尝试使用ServletContext.getResource 。
我已经尝试了很多,但我解决了这个问题:
// ServletContext ctx InputStream stream = ctx.getResourceAsStream("version.properties"); p = new Properties(); p.load(stream);
我必须通过调用getServletContext()getServletContext()
从jsp页面传递ServletContext。 不理想,但这是我能让它工作的唯一方法……
如果有人能提出另一个解决方案,那将是很好的,这可以使用ServletContext
。
+1将它放入类路径中。
如果你正在使用Spring(我强烈建议你这样做,如果你还没有出于很多原因),你可以加载这样的属性文件:
database.username=scott database.password=tiger
并将引用放在您的应用程序上下文中:
(假设您已配置了属性配置程序),如果无法加载文件或该属性不存在,则会导致错误。 应用程序将无法启动。 这实际上是件好事。 它可以让您真正快速地发现问题,并且比默默地失败更好,这有时会带来灾难性后果。
将属性文件复制到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) |#]
加载属性
- JPA – 未知的实体bean类
- GlassFish服务器无法从Eclipse启动,它被卡在69%
- 部署错误:从netbeans到glassfish 4.0的Java-Webproject
- 如何使用Java EE 7和Glassfish 4在IntelliJ IDEA Community Edition中创建Java Servlet应用程序?
- 如何在Spring和GlassFish 5中进行分布式事务XA?
- @ Singleton,@ Start,@ PostConstruct不适用于EJB3.1和Glassfishv3.0.1
- EJB工厂类
- Servlet 3与@WebFilter和@WebServlet部署有关
- 如何手动在Eclipse中配置Glassfish Server