我的问题是关于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
中的属性文件?
由于
答案 0 :(得分:0)
我知道这并没有直接回答这个问题,但通常在为Java EE Web应用程序设置配置属性时,它们会进入web.xml或服务器JNDI树中的环境条目。然后可以从servlet配置中读取它们。
在上面的示例中,尝试使用" getInstance()"使用单例的私有构造函数的模式。非常确定静态初始化器可以在类的第一个实例上运行。