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를 의미합니다. READ_UNCOMMITTED와 같은 1을 볼 것으로 예상됩니다.
내가 명시 적으로 지정하는 경우
: 예상대로 @Transactional (격리 = Isolation.READ_UNCOMMITTED는)쿼리는 위의 1을 반환합니다. 그러나 내 응용 프로그램의 모든 서비스를 특성화하고 싶지 않습니다. 내가 무엇이 누락 되었습니까? 이 속성에서 설정 될 필요가
답변 해 주셔서 감사합니다. 그것을 시도했다. 앱을 시작하지 못했습니다. 로그의 오류 : org.springframework.beans.NotWritablePropertyException : Bean 클래스 [org.springframework.jdbc.datasource.DriverManagerDataSource]의 'defaultTransactionIsolation'속성이 올바르지 않습니다. 'defaultTransactionIsolation'속성에 쓰기가 가능하지 않거나 잘못된 setter 메소드가 있습니다. setter의 매개 변수 유형이 getter의 반환 유형과 일치합니까? java.sql.Connection.TRANSACTION_READ_UNCOMMITTED 대신 1을 입력하거나 다른 속성을 초기화하려고해도 동일한 예외가 발생하여 실패합니다. –
오라클 데이터 소스를 사용하여 이것을 시도한 결과이 오류가 발생했습니다 :'PoolableConnectionFactory를 생성 할 수 없습니다 (READ_COMMITTED 및 SERIALIZABLE 만 유효한 트랜잭션 레벨입니다). ' 따라서 설정은 데이터 소스에 따라 달라질 수 있습니다. 데이터 소스 설정을위한'readOnly' 속성이 있습니다. 대신에 그것을 사용하는 것이 좋습니다. – krock
Andrey, 문제를 해결하려면 dataSource 아래에 "pooled = true"를 추가해야합니다. –