【问题标题】:setting isolation level in spring annotation-based transactions在基于 Spring 注释的事务中设置隔离级别
【发布时间】:2011-03-03 13:58:39
【问题描述】:

我在我的项目中使用基于注释的事务管理(我用@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?

【问题讨论】:

    标签: spring isolation-level spring-transactions


    【解决方案1】:

    如果您配置非默认事务隔离(例如通过在@Transactional 注释中指定),Spring 的事务管理会在Connection 上设置事务隔离。如果您可以配置连接的事务隔离,同时确保没有其他机制更改连接的事务隔离,那么您实际上全局设置了应用程序使用的事务隔离。

    例如,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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2011-12-17
      • 2020-06-07
      • 2012-04-22
      • 2018-04-30
      相关资源
      最近更新 更多