Grails 3.3执行H2脚本命令

时间:2017-08-04 14:09:08

标签: grails gorm h2 grails-3.3

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

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

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

User.withSession { session ->

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

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

但这不起作用。

1 个答案:

答案 0 :(得分:1)

您可以自动装配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)
    }
}