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