使用 Spring 启动和设置内存数据库

发布于 2024-10-11 19:41:21 字数 372 浏览 8 评论 0原文

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

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

我的方法是使用 H2 作为我的数据库,然后可能使用 Spring Batch 从 csv 或 xml 文件加载数据。但我希望有一种更简单的方法来实现这一目标。是否有任何数据库/框架/工具可以开箱即用地执行此操作?

只需几个 SQL 命令即可设置我需要的一切。我正在寻找一种在 Spring 环境中尽可能简单地执行此操作的方法。

I'm writing a small demo application in Java using Spring, that needs to have access to a database. It should run on different machines and it would be far too much effort to setup a real database. Therefore I want to use an embedded one.

The DB has a given schema (two tables) and some (very few) pre-defined entries. I'm looking for a simple way to start an in-memory database, create the tables and fill in the data. All of this should happen while initializing the Spring context.

My approach would be to use H2 as my database and then maybe Spring Batch to load the data from csv- or xml-files. However I was hoping there might be an easier way to achieve this. Are there any databases/frameworks/tools that can do this out-of-the-box?

It would only take a few SQL-commands to set-up everything I need. I'm looking for a way to do this in a Spring-environment as simple as possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

以酷 2024-10-18 19:41:21

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

Spring has some built-in embedded database support, see embedded database support
in the documentation.

夜雨飘雪 2024-10-18 19:41:21

使用 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);
} $;

With H2, you could initialize the database in the database URL itself. Example: you have a SQL script 'start.sql' that contains all the scripts to initialize. This can also include creating the tables from CSV file. Then use a database URL of the form jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql'. The start.sql could look like this (this is an example I'm working on anyway - it shows how to create tables from a CSV file):

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);
} $;
行雁书 2024-10-18 19:41:21

Spring 3 从 3 开始借助 jdbc:embedded-database 元素增加了对嵌入式数据库的更多支持。 阅读本教程了解更多信息。

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

Spring 3 added more support for embedded databases starting from 3 with the help of jdbc:embedded-database element. Read this tutorial for more information.

I'd also recommend using Derby as it comes bundled with JDK 6.

千笙结 2024-10-18 19:41:21

HSQLDB 是一个不错的选择。

HSQLDB is a good choice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文