从 groovy 数据库迁移调用 Grails 服务
Calling a Grails service from a groovy database migration
使用 Grails 2.3.9 我试图在数据库迁移变更集中实施 groovy 变更。它使用 Grails 服务生成 UUID。
dbm-update 执行失败,出现 "connnection proxy not usable after transaction completion" 错误。
变更集:
changeSet(author:"sola", id: "gefc.currency.defaultGlobalBaseCurrency.v49") {
grailsChange {
change {
def igs = ctx.getBean("idGeneratorService")
sql.withBatch(20,
"INSERT INTO core_setting_value " +
" (id, version, module, scope, code, " +
" string_value, boolean_value, long_value) " +
"VALUES " +
"(?, 0, 'gefc.currency', 'global', ?, ?, ?, ?)"
) { ps ->
ps.addBatch(igs.uuid(), "baseCurrency", \
"HUF", null, null)
}
confirm 'Base currency configuration (global setting)'
}
}
}
根本问题是变更中的 groovy 代码干扰了 Liquibase(运行变更集)的事务管理。
将服务方法设为非事务性后,变更集运行良好。
使用 Grails 2.3.9 我试图在数据库迁移变更集中实施 groovy 变更。它使用 Grails 服务生成 UUID。
dbm-update 执行失败,出现 "connnection proxy not usable after transaction completion" 错误。
变更集:
changeSet(author:"sola", id: "gefc.currency.defaultGlobalBaseCurrency.v49") {
grailsChange {
change {
def igs = ctx.getBean("idGeneratorService")
sql.withBatch(20,
"INSERT INTO core_setting_value " +
" (id, version, module, scope, code, " +
" string_value, boolean_value, long_value) " +
"VALUES " +
"(?, 0, 'gefc.currency', 'global', ?, ?, ?, ?)"
) { ps ->
ps.addBatch(igs.uuid(), "baseCurrency", \
"HUF", null, null)
}
confirm 'Base currency configuration (global setting)'
}
}
}
根本问题是变更中的 groovy 代码干扰了 Liquibase(运行变更集)的事务管理。
将服务方法设为非事务性后,变更集运行良好。