Grails3.3执行H2脚本命令

Grails3.3执行H2脚本命令,grails,gorm,h2,grails-3.3,Grails,Gorm,H2,Grails 3.3,我正在使用一个基于H2文件的数据库运行一个小而普通的Grails3.3.0应用程序。出于简单的备份原因,我希望使用H2特定命令将当前数据库状态转储到文件: 目前,我正在尝试像这样执行本机SQL命令 User.withSession { session -> NativeSQLQuerySpecification nativeSQLQuerySpecification = new NativeSQLQuerySpecification("SCRIPT TO /path/to/back

我正在使用一个基于H2文件的数据库运行一个小而普通的Grails3.3.0应用程序。出于简单的备份原因,我希望使用H2特定命令将当前数据库状态转储到文件:

目前,我正在尝试像这样执行本机SQL命令

User.withSession { session ->

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

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

但这是行不通的

您可以自动连接
数据源
,并尝试使用从数据源获得的连接运行sql查询,而无需经过Hibernate。
dataSource
bean在GrailsSpring上下文中注册,它是
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)
    }
}

添加为答案
@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)
    }
}