在EAR应用程序的Wildfly中,一个模块如何读取另一个模块中的属性文件?

时间:2015-09-08 20:07:36

标签: java java-ee wildfly ear properties-file

我的问题是关于EAR应用。我想知道一个模块中的类如何读取另一个模块中的属性文件。

我正在使用Eclipse Luna和Wildfly 8.2.1。

在Eclipse中:
*我有一个企业应用项目"名为 MyEar
*我有一个动态网络项目"名为 MyWeb ,它是 MyEar 的一部分。
*我有一个"实用工程"名为 MySrc ,它是 MyEar 的一部分。

MyWeb 项目中,我有一个名为app.properties的属性文件,它位于WEB-INF\classes文件夹中:

DefaultMaximumBatchSize=1000

MySrc 项目中,我有一个名为AppProperties的类,它在启动时将app.properties文件读入Properties个对象:

package com.srh.config;

import java.io.InputStream;
import java.util.Properties;

public class AppProperties {
    private static final Properties APP_PROPERTIES;

    static {
       InputStream inputStream = null;

       APP_PROPERTIES = new Properties();

       try {
          inputStream = AppProperties.class.getResourceAsStream("/app.properties");
          System.out.println("AppProperties: inputStream=" + inputStream);

          if (inputStream != null) {
             APP_PROPERTIES.load(inputStream);
          }
       } catch (Exception e) {
          System.out.println("AppProperties: Exception occured; e=" + e);
       }
    }

    public static String getValue(String propertyName) {
        if (propertyName == null || propertyName.equalsIgnoreCase(""))
            return null;
        else
            return APP_PROPERTIES.getProperty(propertyName);
    }
}

MyWeb 项目中,我有一个名为AppContextListener的侦听器,我正在测试查找AppProperties中的值:

package com.srh.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import com.srh.config.AppProperties;

@WebListener
public class AppContextListener implements ServletContextListener {
    public AppContextListener() {
    }

    public void contextInitialized(ServletContextEvent arg0)  { 
        String defaultMaxBatchSize = AppProperties.getValue("DefaultMaximumBatchSize");
        System.out.println("AppContextListener: contextInitialized(ServletContextEvent): defaultMaxBatchSize=" + defaultMaxBatchSize);
    }

    public void contextDestroyed(ServletContextEvent arg0)  { 
    }   
}

当我将EAR应用程序部署到Wildfly时,Eclipse将其部署为 MyEar.ear ,其中包含以下文件:

  • lib\MySrc.jar
  • META-INF\application.xml
  • MyWeb.war\META-INF\MANIFEST.MF
  • MyWeb.war\WEB-INF\web.xml
  • MyWeb.war\WEB-INF\classes\app.properties
  • MyWeb.war\WEB-INF\classes\com\srh\listener\AppContextListener.class

MySrc.jar里面有这些文件:

  • com\srh\config\AppProperties.class
  • META-INF\MANIFEST.MF

当我启动Wildfly时,我会在server.log中获得此输出:

  

AppProperties:inputStream = null
  AppContextListener:contextInitialized(ServletContextEvent):defaultMaxBatchSize = null

那么模块MySrc如何读取模块MyWeb中的属性文件?

由于

1 个答案:

答案 0 :(得分:0)

我知道这并没有直接回答这个问题,但通常在为Java EE Web应用程序设置配置属性时,它们会进入web.xml或服务器JNDI树中的环境条目。然后可以从servlet配置中读取它们。

在上面的示例中,尝试使用" getInstance()"使用单例的私有构造函数的模式。非常确定静态初始化器可以在类的第一个实例上运行。