【问题标题】:Start and setup in-memory DB using Spring使用 Spring 启动和设置内存数据库
【发布时间】:2011-06-07 22:50:28
【问题描述】:

我正在使用 Spring 用 Ja​​va 编写一个小型演示应用程序,它需要访问数据库。它应该在不同的机器上运行,并且设置一个真正的数据库会花费太多的精力。因此我想使用嵌入式。

数据库具有给定的架构(两个表)和一些(非常少的)预定义条目。我正在寻找一种简单的方法来启动内存数据库、创建表并填写数据。所有这些都应该在初始化 Spring 上下文时发生。

我的方法是使用 H2 作为我的数据库,然后使用 Spring Batch 从 csv 或 xml 文件加载数据。但是我希望可能有一种更简单的方法来实现这一点。有没有开箱即用的数据库/框架/工具?

只需要几个 SQL 命令来设置我需要的一切。我正在寻找一种在 Spring 环境中尽可能简单的方法。

【问题讨论】:

    标签: database spring h2 imdb


    【解决方案1】:

    Spring 有一些内置的嵌入式数据库支持,请参阅文档中的embedded database support

    【讨论】:

    • +1 提示:我无法想象比这更简单的方法。
    • 感谢您的提示。我想知道我是怎么错过的。那应该正是我需要的。
    【解决方案2】:

    使用 H2,您可以在数据库 URL 本身中初始化数据库。示例:您有一个 SQL 脚本“start.sql”,其中包含要初始化的所有脚本。这还可以包括从 CSV 文件创建表。然后使用jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql' 形式的数据库URL。 start.sql 可能看起来像这样(这是我正在处理的一个示例 - 它显示了如何从 CSV 文件创建表):

    create table if not exists location(id int primary key, country varchar, 
    region varchar, city varchar, postalCode varchar, latitude float, longitude float, 
    metroCode varchar, areaCode varchar) 
    as select * from csvread('~/Downloads/GeoLiteCity/GeoLiteCity-Location.csv');
    
    create table if not exists blocks(start long, end long primary key, location int) 
    as select * from csvread('~/Downloads/GeoLiteCity/GeoLiteCity-Blocks.csv');
    
    create alias if not exists ip2id deterministic as $$
    long ip2id(String s) {
      String[] x = s.split("\\.");
      return (Long.parseLong(x[0]) << 24) + (Long.parseLong(x[1]) << 16) +
        (Long.parseLong(x[2]) << 8) + Long.parseLong(x[3]);
    } $$;
    
    create alias if not exists id2ip deterministic as $$
    String id2ip(long x) {
      return (x >> 24) + "." + ((x >> 16) & 255) + "." + 
          ((x >> 8) & 255) + "." + (x & 255);
    } $$;
    

    【讨论】:

      【解决方案3】:

      jdbc:embedded-database 元素的帮助下,Spring 3 从 3 开始增加了对嵌入式数据库的支持。 Read this tutorial 了解更多信息。

      我还建议使用 Derby,因为它与 JDK 6 捆绑在一起。

      【讨论】:

        【解决方案4】:

        HSQLDB 是个不错的选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-02
          • 2019-07-17
          • 2017-06-13
          • 2010-12-29
          • 1970-01-01
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          相关资源
          最近更新 更多