从 $TOMCAT_HOME\lib 读取属性文件

Reading properties file from $TOMCAT_HOME\lib

我们有一个使用 Tomcat 服务器的小型 Web 应用程序。所有数据库详细信息都在属性文件中作为键值对供 hibernate.cfg.xml 读取。

为了便于服务器团队管理,属性文件需要转到 $TOMCAT_HOME/lib 文件夹。 Hibernate 配置文件位于:APP_HOME\src\main\resources\hibernate.cfg.xml
并且它可以被应用程序访问 类。
休眠配置文件似乎没有读取 $TOMCAT_HOME/lib/myapp.properties
我的主要要求是属性文件应位于 $TOMCAT_HOME/lib.
谁能给我建议正确的做法。

提前致谢..!

您可以试试这个来获取属性文件的路径:

String propertyFilePathStr= System.getProperty("catalina.base") +
                  File.separator + "lib"+ File.separator + "myapp.properties";

然后通过以下方式配置 Hibernate 以使用此配置文件:

Configuration config = new Configuration().configure(propertyFilePathStr);

但是,这并不是说这仅适用于 Tomcat,如果您使用不同的服务器(如 Glassfish 等)则需要进行更改

对于 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);

谢谢V33R和车探。你的两个评论都给了我一个方向。 我用系统属性

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();
        }
    }

Public获取SessionFactory的方法

    public static SessionFactory getSessionFactory() {

    if(sessionFactory == null){
        sessionFactory = buildSessionFactory();
    }
    return sessionFactory;
}