Tôi không thể tìm ra cách chỉ định mức cách ly giao dịch mặc định trong ứng dụng Grails. Xin hãy giúp đỡ và chỉ ra sai lầm của tôi ở đâu. Sau đây là các chi tiết.Cách chỉ định mức cách ly giao dịch mặc định trong Grails
Grails: 1.3.7
Cơ sở dữ liệu: 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
}
Sau đó, tôi đang điều hướng thông qua việc áp dụng và thực hiện các truy vấn sau cùng thời gian:
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
trả về:
session_id host_name program_name login_name status transaction_isolation_level
61 ANDREYK-WS jTDS cm running 2
2 có nghĩa là READ_COMMITTED. Tôi hy vọng sẽ thấy 1, tức là READ_UNCOMMITTED.
Nếu tôi chỉ định rõ ràng: @Transactional (cô lập = Isolation.READ_UNCOMMITTED)
Truy vấn trên trả về 1 như mong đợi. Tuy nhiên, tôi không muốn phân bổ tất cả các dịch vụ trong ứng dụng của mình. Tôi đang thiếu gì?
Cảm ơn câu trả lời. Đã thử điều đó. Ứng dụng không khởi động được. Lỗi trong nhật ký: org.springframework.beans.NotWritablePropertyException: Thuộc tính không hợp lệ 'defaultTransactionIsolation' của lớp bean [org.springframework.jdbc.datasource.DriverManagerDataSource]: Thuộc tính Bean 'defaultTransactionIsolation' không thể ghi hoặc có phương thức setter không hợp lệ. Liệu kiểu tham số của bộ setter có khớp với kiểu trả về của getter không? Không thành công với cùng một ngoại lệ nếu tôi nhập 1 thay vì java.sql.Connection.TRANSACTION_READ_UNCOMMITTED hoặc cố gắng khởi tạo các thuộc tính khác. –
Tôi đã thử điều này bằng cách sử dụng một nguồn dữ liệu oracle và có lỗi này: 'Không thể tạo PoolableConnectionFactory (READ_COMMITTED và SERIALIZABLE là các mức giao dịch hợp lệ duy nhất)'. Vì vậy, có vẻ như cài đặt đó có thể phụ thuộc vào nguồn dữ liệu. Có một thuộc tính 'readOnly' cho cấu hình nguồn dữ liệu, tôi đề nghị bạn sử dụng nó thay vào đó. – krock
Andrey, bạn cần thêm "pooled = true" vào dataSource để khắc phục sự cố của mình. –