如何读取/写入H2嵌入式数据库到JAR内的文件?

时间:2013-03-26 02:55:48

标签: java classpath h2 embedded-database

我有一个Eclipse项目,其组织如下:

MyProj/
    src/
        main/
            java/
                <All main Java source here>
            config/
                spring/
                    spring-config.xml
                views/
                    <All JSPs here>
                h2/
                    my-h2-db
        test/
            java/
            config/   } etc. for test sources

当我将它捆绑到WAR中时,它的打包方式如下:

MyProj.war
    META-INF/
    WEB-INF/
        web.xml
        lib/
        classes/
            spring-config.xml
            my-h2-db
            views/
                Home.jsp
                About.jsp
                etc.
            com/ --> root dir for all compiled Java binaries

我需要编写能够CRUD一个H2数据库的代码(以及随之而来的所有表,用户等),本例中我称之为my-h2-db。这样,无论我是从Eclipse内部进行测试,还是实际使用部署的WAR,app都可以使用相同的DB文件。

所以我问:

  • 如何从Eclipse和运行时(WAR)类路径访问my-h2-db文件,因为它打包在与Eclipse项目中的位置不同的位置?和

1 个答案:

答案 0 :(得分:3)

我认为你不想在你的WAR应用程序中打包H2文件。它无法在WAR中使用它们。

您在版本控制中想要的是用于构建数据库实体的DDL(并在必要时预先填充)。然后,在开发或生产环境中,使用这些脚本来创建/更新数据库。

Web应用程序中的内容只是用于定位嵌入式数据库的JDBC URL(指定数据库的文件位置)。如您所知,这将根据开发或生产环境而有所不同。

我一直在使用LiquiBase作为管理数据库创建/升级的一种方式,而且它非常易于使用。

但是,将数据库作为开发的一部分创建然后将这些文件嵌入WAR中以便直接使用它的想法将无效。没有保存这些文件的概念,因此没有数据会持续存在。