установка уровня изоляции в транзакциях на основе весенних аннотаций - PullRequest
9 голосов
/ 03 марта 2011

Я использую в своем проекте управление транзакциями на основе аннотаций (я аннотирую некоторые методы с помощью @Transactional). Я хотел бы установить уровень изоляции глобально (не указав его в качестве аргумента для каждой аннотации @Transactional).

Можно ли настроить это в XML? В настоящее время моя конфигурация xml содержит

<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="dataSource" />
</bean>

Можно ли как-то добавить изоляцию в tx: annotation-driven?

1 Ответ

6 голосов
/ 04 марта 2011

Управление транзакциями Spring устанавливает изоляцию транзакции для Connection , если вы настраиваете изоляцию транзакции не по умолчанию (например, указав ее в аннотации @Transactional). Если вы можете сконфигурировать изоляцию транзакций для соединений, одновременно гарантируя, что никакой другой механизм не изменит изоляцию транзакций для соединений, то вы фактически установите глобальную изоляцию транзакций, используемую приложением.

Например, класс Commons DBCP BasicDataSource определяет свойство defaultTransactionIsolation для установки изоляции транзакции соединений, возвращаемых из пула:

<bean
    id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="defaultTransactionIsolation">
    <util:constant static-field="java.sql.Connection.TRANSACTION_READ_COMMITTED"/>
  </property>
</bean>
...