我们有一个使用Tomcat服务器的小型Web应用程序。所有数据库详细信息都在属性文件中作为hibernate.cfg.xml
读取的键值对。
为了使服务器团队易于管理,属性文件需要转到$TOMCAT_HOME/lib
文件夹。 Hibernate配置文件位于:APP_HOME\src\main\resources\hibernate.cfg.xml
它可以被应用程序类访问。
hibernate配置文件似乎不是$TOMCAT_HOME/lib/myapp.properties
我的主要要求是属性文件应该驻留在$ TOMCAT_HOME / lib中
任何人都可以建议我做正确的事。
提前致谢..!
答案 0 :(得分:1)
您可以尝试这样来获取属性文件的路径:
String propertyFilePathStr= System.getProperty("catalina.base") +
File.separator + "lib"+ File.separator + "myapp.properties";
然后配置Hibernate以使用此配置文件:
Configuration config = new Configuration().configure(propertyFilePathStr);
但是,这不仅仅适用于Tomcat,如果您使用的是像Glassfish等其他服务器,则需要更改。
答案 1 :(得分:1)
对于tomcat,可以使用以下方法完成:
File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "myconfig.properties");
InputStream stream = new FileInputStream(configFile);
Properties props = new Properties();
props.load(stream);
答案 2 :(得分:1)
谢谢V33R和Chetan。你的两条评论都给了我指导。 我使用了系统属性
的catalina.home
而不是指向我需要的正确位置的 catalina.base 。 以下是我最终做的事情:
private static Properties extractPropertiesFile() throws FileNotFoundException, IOException{
String propertiesFilePath = System.getProperty("catalina.home") +
File.separator + "lib"+ File.separator + "myapp.properties";
Properties properties = new Properties();
properties.load(new FileInputStream(propertiesFilePath));
return properties;
}
我不得不将hibernate.cfg.xml文件中设置的数据库属性删除到以下方法。我尝试加载提取的属性文件,但没有按预期工作,因此将它们加载到Hibernate.cfg.Configuration实例中,如下所示。 构建会话工厂:
private static SessionFactory buildSessionFactory() {
try {
Configuration configuration = new Configuration();
Properties properties = extractPropertiesFile();
configuration.configure("hibernate.cfg.xml").setProperties(properties);
// The properties below are extracted from $TOMCAT_HOME/lib/myapp.properties
configuration.setProperty("hibernate.connection.driver_class", properties.getProperty("propertyfile.database.driver.classname"));
serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()). buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
获取SessionFactory的公共方法
public static SessionFactory getSessionFactory() {
if(sessionFactory == null){
sessionFactory = buildSessionFactory();
}
return sessionFactory;
}