2017-08-04 127 views
0

我使用基于H2文件的数据库运行一个小而平凡的Grails 3.3.0应用程序。对于简单的备份原因,我想当前数据库状态转储使用H2特定SCRIPT命令文件:Grails 3.3执行H2脚本命令

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()) 
} 

但这不起作用。

+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) 
    } 
}