从$ TOMCAT_HOME \ lib读取属性文件

时间:2016-05-27 18:55:10

标签: java hibernate tomcat7

我们有一个使用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中 任何人都可以建议我做正确的事。

提前致谢..!

3 个答案:

答案 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;
}