Grails 3.3 执行H2脚本命令

标签 grails grails-orm h2 grails-3.3

我正在使用基于 H2 文件的数据库运行一个小型、简单的 Grails 3.3.0 应用程序。出于简单的备份原因,我想使用 H2 特定的 SCRIPT 将当前数据库状态转储到文件中。命令:

SCRIPT TO /path/to/backup/dir/tempoDb.sql;

目前我正在尝试像这样执行 native SQL 命令。
User.withSession { session ->

   NativeSQLQuerySpecification nativeSQLQuerySpecification = new NativeSQLQuerySpecification("SCRIPT TO /path/to/backup/dir/tempoDb.sql;", null, null)

   session.executeNativeUpdate(nativeSQLQuerySpecification, new QueryParameters())
}

但这不起作用。

最佳答案

您可以自动连接 dataSource并尝试使用从数据源获得的连接运行您的 sql 查询,而无需通过 Hibernate。 dataSource bean 在 Grails Spring 上下文中注册,它是 javax.sql.DataSource 的一个实例.

这是一个将当前 H2 数据库备份到文件系统的 Grails 服务示例。

@ReadOnly
class BackupService {

    DataSource dataSource

    def backup() {

        def sql = "SCRIPT DROP TO '${System.properties['java.io.tmpdir']}/backup.sql'"

        Statement statement = dataSource.connection.createStatement()
        boolean result = statement.execute(sql)
    }
}

关于Grails 3.3 执行H2脚本命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508967/

相关文章:

javascript - chalice 的 <r :script> tag as compared to <g:javascript>

Grails log4j appender 配置似乎被忽略了

Grails 枚举映射

Grails:GORM 多对多和一对多关系映射

java - 恢复 H2 数据库,同时只有 '.db' 扩展文件

java - 无法看到通过 Spring Boot Java 创建的表

grails - Grails计划的 quartz 作业永远不会运行

grails - Grails Action 问题

grails - 无法将 addTo 与 hasmany grails 域一起使用

database - h2 内存表,远程连接