我正在尝试将一长串文件添加到 mysql 中,并使用带有 grails 的 spring ACL 服务来附加权限。所以,在我的控制器中,我有:
Files.withTransaction {
Files file = new Files(dataStore:ds,created:new Date(),path:target,name:fileName,contentType:contentType,contentLength:contentLength,isFolder:false).save(flush:true)
file = Files.lock(file.id)
filesService.addPermission(file, username ,BasePermission.ADMINISTRATION)
}
我不担心 Files 域对象,它支持大量数据,(特别是因为我在 mysql 中禁用了版本控制),问题出在使用 aclUtilService 的 filesService 上,
@Transactional
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_USER') or hasRole('ROLE_GROUP_OWNER')")
def addPermission(Files f, String username,Permission permission) {
aclUtilService.addPermission f,username,permission
}
随机我有以下死锁(乐观?)错误:
尝试获取锁时发现死锁;尝试重新启动事务。Stacktrace 如下: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: 尝试获取锁时发现死锁;尝试在 com.mysql.jdbc.Util.getInstance(Util.java:381) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError. java:1045) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO .java:3490) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109) 在 com.mysql.jdbc.ConnectionImpl.execSQL( ConnectionImpl.java:2648) 在 com.mysql.jdbc.PreparedStatement。
请问有什么帮助吗?