在 Spring 基于注释的事务中设置隔离级别

发布于 2024-10-20 06:35:38 字数 437 浏览 4 评论 0原文

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

I use in my project annotation-based transaction management (I annotate some methods with @Transactional). I would like to set the isolation level globally (not by putting it as an argument to each @Transactional annotation).

Is it possible configure that in the XML? Currently my xml configuration contains

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

Is it possible to add the isolation somehow to tx:annotation-driven?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

染年凉城似染瑾 2024-10-27 06:35:38

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>

Spring's transaction management sets the transaction isolation on the Connection if you configure a non-default transaction isolation (by specifying it in a @Transactional annotation for example). If you can configure the transaction isolation of the connections while ensuring no other mechanism changes the transaction isolation of the connections, then you in effect globally set the transaction isolation used by the application.

For example, the Commons DBCP BasicDataSource class defines the defaultTransactionIsolation property to set the transaction isolation of connections returned from the pool:

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文