Java 使用EclipseLink获取数据库备份/转储
有没有办法通过EclipseLink实体管理器创建数据库转储/备份? 我想在我的java(dropwizard)项目中添加一个功能,允许管理员下载当前数据库(也许还可以在中导入一个新数据库)。 我正在使用H2数据库Java 使用EclipseLink获取数据库备份/转储,java,eclipselink,entitymanager,dropwizard,Java,Eclipselink,Entitymanager,Dropwizard,有没有办法通过EclipseLink实体管理器创建数据库转储/备份? 我想在我的java(dropwizard)项目中添加一个功能,允许管理员下载当前数据库(也许还可以在中导入一个新数据库)。 我正在使用H2数据库 谢谢这对您来说相当容易,但是我认为EntityManager不会这么做 (这不是100%正确-但我不知道如何解决,所以我向您介绍了一个简单的替代方案,您也可以使用EM) 因此,必须: 您需要拥有H2DB,并且需要绑定数据源(或者从实体管理器中打开连接)。那么您要运行的命令是: SCR
谢谢这对您来说相当容易,但是我认为EntityManager不会这么做 (这不是100%正确-但我不知道如何解决,所以我向您介绍了一个简单的替代方案,您也可以使用EM) 因此,必须: 您需要拥有H2DB,并且需要绑定数据源(或者从实体管理器中打开连接)。那么您要运行的命令是:
SCRIPT TO '/path/to/my/file'
例如,我就是这样实现的:
@Inject
private DataSource ds;
@GET
@Path("dump")
public Response dump() {
try (Connection c = ds.getConnection(); Statement s = c.createStatement()) {
s.execute("SCRIPT TO '/home/artur/tmp/test/test.sql'");
} catch (SQLException e) {
e.printStackTrace();
}
return Response.ok().build();
}
因此,有几点:
您不需要直接访问数据源。一个快速的谷歌显示,eclipselink会让你像这样访问你的连接:
entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();
或者,这也可以工作(并且不使用任何连接/jdbc属性):
我不知道你到底想做什么,但你可以:
- 将文件名传递到资源中,以便DBA知道在哪里创建转储李>
- 写入临时位置,读取转储并返回流(用于下载)
Artur这对您来说相当容易做到,但是我认为EntityManager不会做到这一点 (这不是100%正确-但我不知道如何解决,所以我向您介绍了一个简单的替代方案,您也可以使用EM) 因此,必须: 您需要拥有H2DB,并且需要绑定数据源(或者从实体管理器中打开连接)。那么您要运行的命令是:
SCRIPT TO '/path/to/my/file'
例如,我就是这样实现的:
@Inject
private DataSource ds;
@GET
@Path("dump")
public Response dump() {
try (Connection c = ds.getConnection(); Statement s = c.createStatement()) {
s.execute("SCRIPT TO '/home/artur/tmp/test/test.sql'");
} catch (SQLException e) {
e.printStackTrace();
}
return Response.ok().build();
}
因此,有几点:
您不需要直接访问数据源。一个快速的谷歌显示,eclipselink会让你像这样访问你的连接:
entityManager.getTransaction().begin();
java.sql.Connection connection = entityManager.unwrap(java.sql.Connection.class);
...
entityManager.getTransaction().commit();
或者,这也可以工作(并且不使用任何连接/jdbc属性):
我不知道你到底想做什么,但你可以:
- 将文件名传递到资源中,以便DBA知道在哪里创建转储李>
- 写入临时位置,读取转储并返回流(用于下载)