如何在Grails中指定默认事务隔离级别

And*_*rev 5 grails transactions isolation-level

我无法弄清楚如何在Grails应用程序中指定默认事务隔离级别.请帮忙指出我的错误.以下是详细信息.

Grails:1.3.7

数据库:Sql Server 2008.

DataSource.groovy的:

dataSource {
  ...
  driverClassName = "net.sourceforge.jtds.jdbc.Driver"
  dialect = org.hibernate.dialect.SQLServerDialect
  defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED
}

hibernate {
  ...
  connection.isolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED
}
Run Code Online (Sandbox Code Playgroud)

然后我浏览应用程序并同时执行以下查询:

SELECT session_id, host_name, program_name, login_name, status, transaction_isolation_level
FROM sys.dm_exec_sessions
WHERE host_name IS NOT NULL AND login_name = 'cm'
ORDER BY host_name, program_name
Run Code Online (Sandbox Code Playgroud)

返回:

session_id  host_name   program_name    login_name  status  transaction_isolation_level
61          ANDREYK-WS  jTDS            cm          running 2
Run Code Online (Sandbox Code Playgroud)

2表示READ_COMMITTED.我希望看到1,即READ_UNCOMMITTED.

如果我明确指定:@Transactional(isolation = Isolation.READ_UNCOMMITTED)

上面的查询按预期返回1.但是,我不想在我的应用程序中归因所有服务.我错过了什么?

kro*_*ock 6

这需要在数据源配置的属性属性下设置,即

dataSource {
  ...
  driverClassName = "net.sourceforge.jtds.jdbc.Driver".
  dialect = org.hibernate.dialect.SQLServerDialect
  properties {
    defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED.
  }
}
Run Code Online (Sandbox Code Playgroud)