我無法弄清楚如何在Grails應用程序中指定默認事務隔離級別。請幫助並指出我的錯誤所在。以下是詳細信息。如何在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
}
然後,我通過導航應用程序,並在同一執行以下查詢時間:
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
返回:
session_id host_name program_name login_name status transaction_isolation_level
61 ANDREYK-WS jTDS cm running 2
2表示READ_COMMITTED。我期望看到1,即READ_UNCOMMITTED。
如果我明確指定: @Transactional(隔離= Isolation.READ_UNCOMMITTED)
上述查詢按預期返回1。 但是,我不想在我的應用程序中引用所有服務。 我錯過了什麼?
感謝您的回答。試過了。應用程序無法啓動。錯誤日誌: org.springframework.beans.NotWritablePropertyException:Bean類[org.springframework.jdbc.datasource.DriverManagerDataSource]的無效屬性'defaultTransactionIsolation':Bean屬性'defaultTransactionIsolation'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型相匹配? 如果我輸入1而不是java.sql.Connection.TRANSACTION_READ_UNCOMMITTED或嘗試初始化其他屬性,則會失敗。 –
我試着使用oracle數據源,並得到這個錯誤:'不能創建PoolableConnectionFactory(READ_COMMITTED和SERIALIZABLE是唯一有效的事務級別)'。所以看起來設置可能與數據源有關。數據源配置有'readOnly'屬性,我建議你改用它。 – krock
Andrey,你需要在dataSource下添加「pooled = true」來解決你的問題。 –