阅读glassfish 4上的属性文件

时间:2014-02-06 21:14:18

标签: java glassfish war

我需要读取glassfish 4应用程序中的属性文件。该文件需要位于应用程序中的某个位置(即不在文件系统中的某个随机位置)。

如果重要的话,我正在开发eclipse,项目是用maven构建的,而且这个工件是一场战争。

在我看来,要完成这项工作,我需要了解三件事。

1)原始文件需要在哪里?

2)文件需要在哪里结束?

3)我如何阅读?

到目前为止,我创建了文件:

src/main/resources/version.properties

最终在

WEB-INF/classes/version.properties

我不知道这是不是正确的位置。

基于类似的问题,我定义了一个ServletContextListener:

public class ServletContextClass implements ServletContextListener {
...
   @Override
   public void contextInitialized(ServletContextEvent arg0) {
       ServletContext ctx = arg0.getServletContext();
       InputStream istream = ctx.getResourceAsStream("version.properties"); 

       // at this point, istream is null

       Properties p = new Properties();
       p.load(istream);
   }
}

我不确定我是否将文件放在错误的位置,如果我读错了,或者两者都错。

更新:以下“有效”:

   @Override
   public void contextInitialized(ServletContextEvent arg0) {
       ResourceBundle bundle =  ResourceBundle.getBundle("version");
       if (bundle == null) { 
          logger.info("bundle is null");
       } else {
          logger.info("bundle is not null");
          logger.info("version: " + bundle.getString("myversion"));
       }
   }

但是,我不认为这是正确的解决方案。捆绑包用于语言环境支持,这不属于该类别。

更新2:我更正了文件结束的位置。

1 个答案:

答案 0 :(得分:1)

1)将version.properties文件放在

src/main/resources/version.properties

似乎是正确的。

2)在目标战争中,文件确实最终进入

WEB-INF/classes/version.properties

3)读取文件:我已经定义了ServletContextListener。如果不这样做,则需要定义一个并在web.xml中进行配置。这是我的ServletContextListener的一部分:

   package com.mycompany.service;

   public class ServletContextClass implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
           ServletContext ctx=arg0.getServletContext();

           try {
              Properties p = new Properties();
              InputStream istream = ctx.getResourceAsStream("/WEB-INF/classes/version.properties");
              p.load(istream);
              Properties sysProps = System.getProperties();
              sysProps.putAll(p);
          } catch (IOException e) {
              logger.error("Error reading " + "version.properties");
          }
       }
    }

它配置了这个web.xml:

<listener>
    <listener-class>com.mycompany.service.ServletContextClass</listener-class>
</listener>