Я не могу понять, как указать уровень изоляции транзакций по умолчанию в приложении 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: Недопустимое свойство 'defaultTransactionIsolation' из bean-класса [org.springframework.jdbc.datasource.DriverManagerDataSource]: свойство Bean 'defaultTransactionIsolation' не доступно для записи или имеет неверный метод setter. Соответствует ли тип параметра сеттера типу возврата получателя? Он выходит из строя с тем же исключением, если я набираю 1 вместо java.sql.Connection.TRANSACTION_READ_UNCOMMITTED или пытаюсь инициализировать другие свойства. –
Я пробовал это с использованием источника данных oracle и получил эту ошибку: 'Невозможно создать PoolableConnectionFactory (READ_COMMITTED и SERIALIZABLE - единственные допустимые уровни транзакций)'. Похоже, что настройка может быть зависимой от источника данных. Существует атрибут 'readOnly' для конфигурации datasource, я предлагаю вам использовать это вместо этого. – krock
Андрей, вам нужно добавить «pooled = true» в dataSource, чтобы исправить вашу проблему. –