H2 db文件位于自定义位置

时间:2017-04-25 09:54:10

标签: java xml h2 web.xml

我在嵌入模式下启动H2 db。默认情况下,会在users目录中创建h2 db文件。我需要在自定义位置创建。应从环境变量中读取自定义位置(示例%MY_HOME%= C:\ TEST)。 应在c:\ TEST中创建数据库文件。我应该在web.xml中做些什么改变呢?

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以通过设置H2的db.url属性来添加自定义位置。

例如:

如果您的数据库名称是DBNAME,那么您可以按照以下方式在自定义位置的 web.xml 中设置db.url:

jdbc:h2:file:C:\\Test\\DBNAME

如果您在应用程序中使用 Hibernate ,则可以按以下方式为H2数据库构建会话工厂:

private static SessionFactory buildSessionFactory()
{
    String methodName = "buildSessionFactory -->";
    _logger.debug(methodName + Constants.CALLED);
    try
    {
        // Create the SessionFactory from hibernate.cfg.xml
        Configuration configuration = new Configuration();
        URL resourceURL = HibernateUtil.class.getClassLoader().getResource("hibernate.cfg.xml");
        _logger.debug(resourceURL);
        configuration = configuration.configure(resourceURL);
        //Here you can set your custom url for H2 database.
        String url = "jdbc:h2:file:C:\\Test\\DBNAME;MV_STORE=FALSE;MVCC=TRUE;DB_CLOSE_ON_EXIT=TRUE;FILE_LOCK=NO";
        _logger.debug("Database URL " + url);
        _logger.debug("Build Session Factory URL: " + url);
        configuration = configuration.setProperty("hibernate.connection.url", url);
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
        _logger.debug("Session factory built");
        _logger.debug(Constants.END);
        return configuration.buildSessionFactory(serviceRegistry);
    }
    catch (Throwable ex)
    {
        _logger.debug("Failed to create session factory");
        _logger.error("Initial SessionFactory creation failed.", ex);
        ex.printStackTrace();
        throw new ExceptionInInitializerError(ex);
    }
}

答案 1 :(得分:0)

我的查询得到了答案。我们可以用两种方式设置init参数。 1)web.xml,一般每个人都使用。 2)contextInitialized将是tomcat启动时被称为回调方法的方法。在该方法中,您可以使用servletContext clas的实例设置init参数。