【发布时间】:2012-04-03 14:34:48
【问题描述】:
首先,很抱歉重复了一个常见问题的变体。但是,我很难理解这里的最佳方法。我有一个使用 Hibernate 和 Glassfish 3 的应用程序。像其他人一样,我希望能够从 war 文件外部加载 Hibernate 属性。我设法开始工作的唯一解决方案如下。它从 domain/domain1/config 文件夹加载属性。
private Properties getLocalHibernateProperties() {
Properties properties = new Properties();
try {
File pf = new File(System.getProperty("user.dir"), PROPERTIES_FILE_NAME);
InputStream inStream = new FileInputStream(pf);
properties.load(inStream);
}
catch (Exception e) {
e.printStackTrace();
}
return properties;
}
但是,我还发现了使用 ServletContext 的示例 How to read properties file placed outside war?。结合各个部分:
in web.xml <listener-class>foo.bar.startup.HibernatePropertiesLoader</listener-class>
public class HibernatePropertiesLoader implements ServletContextListener {
public void contextInitialized(ServletContextEvent event){
ServletContext context = event.getServletContext();
context.setAttribute("settings", new HibernatePropertiesReader(context));
}
public void contextDestroyed(ServletContextEvent event){}
}
public class HibernatePropertiesReader {
ServletContext ctx = null;
public HibernatePropertiesReader(ServletContext ctx) {
this.ctx = ctx;
}
public Properties getLocalHibernateProperties() {
Properties properties = new Properties();
try {
InputStream inStream = ctx.getResourceAsStream(PROPERTIES_FILE);
properties.load(inStream);
}
catch (Exception e) {
e.printStackTrace();
}
return properties;
}
}
我可以理解,第二个解决方案将搜索 Servlet 的 CLASSPATH -(这是正确的吗?),因此比我原来的解决方案更灵活。但是,我不明白如何使用(访问)我的 HibernateUtils 类的属性。我想这意味着我对 ServletContext 的理解中缺少一些基本的东西......
感谢任何帮助、建议、更好的解决方案...
【问题讨论】:
标签: java hibernate jakarta-ee