spring的@Transactional为什么不能指定TransactionManager

发布时间:2024-01-11 00:20:34 来源:君肯网

用过spring的人应该都使用过@Transactional注解了

在只有一个TransactionManager时没有问题

配置如下:

Java代码

&lt!– 事务配置 –&gt

&ltbean id=”transactionManager” &gt

&ltproperty name=”sessionFactory” ref=”sessionFactory” /&gt

&lt/bean&gt

&lt!– 使用annotation定义事务 –&gt

&lttx:annotation-driven transaction-manager=”transactionManager” proxy-target-/&gt

如果有两个事务管理器 如 HibernateTransactionManager和 DataSourceTransactionManager

就不好办了

为什么不直接在@Transactional上指定事务管理器呢 比如说这样

Java代码

@Transactional(transactionManager=DataSourceTransactionManager)

Spring中在配置<tx:annotation-driven transaction-manager=”transactionManager” />

Spring配置中transactionAttributes的使用方法和作用

最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致。但 是去掉关联关系后的效果不显著。

查找spring的相关配置,发现原来关于“transactionAttributes”有问题。原来的配置如下:

&ltbean id=”baseTransactionProxy”

lazy-init=”true” abstract=”true”&gt

&ltproperty name=”transactionManager”&gt

&ltref bean=”transactionManager” /&gt

&lt/property&gt

&ltproperty name=”transactionAttributes”&gt

&ltprops&gt

&ltprop key=”sav*”&gtPROPAGATION_REQUIRED&lt/prop&gt

&ltprop key=”update*”&gtPROPAGATION_REQUIRED&lt/prop&gt

&ltprop key=”delete*”&gtPROPAGATION_REQUIRED&lt/prop&gt

&ltprop key=”get*”&gtPROPAGATION_REQUIRED,readOnly&lt/prop&gt

&ltprop key=”find*”&gtPROPAGATION_REQUIRED,readOnly&lt/prop&gt

&lt/props&gt

&lt/property&gt

&lt/bean&gt

使用上述配置,在JPA打出的日志中显示每次查询时都要进行更新操作,查阅相关spring 的资料后发现transactionAttributes的各种属性的意义,现把资料分享如下:

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

当前所有的事务都使用“PROPAGATION_REQUIRED”属性值,并且控制事务的操作权限为只读,以保证查询时不会更新数据。根据上述 定义 “PROPAGATION_REQUIRED”属性会造成为所有的操作都创建事务,从而会出现JPA的日志中查询时也会进行更新操作的现象,也就造成了效 率的低下。将所有查询的操作改成事务类型为“PROPAGATION_NEVER”(不使用事务),则查询效率立即提升,但是此时担心一个问题:比如在一 个saveXXX()的方法中,如果方法内部使用更新、查询、再更新的操作流程,会不会造成调用查询时,由于上述配置造成的抛出异常。

另外,如果出现

〈prop key=”myMethod”〉PROPAGATION_REQUIRED,readOnly,-Exception〈/prop〉

这样的配置,其中:

spring的@Transactional为什么不能指定TransactionManager

-Exception表示有Exception抛出时,事务回滚. -代表回滚+就代表提交

readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用.

ibatis中transactionManager和dataSource的区别

1、首先,第一种配置方式是每一个Javabean都有一个代理类。

2、第二种就是所有的Javabean都是用代理的基类。

3、第三种就是使用Java使用拦截器来配置事务。

4、第四种就是使用带有tx标签的配置的一种拦截器。使用时,@Transactional(“datasource1Tx”)来区别具体使用某个事务管理器。

5、最后一种就是使用全部注解的方式。

tomcat 能得到 javax.transaction.TransactionManager 吗

DataSourceTransactionManager:事务管理器 对JDBC(Java Data Base Connectivity,java数据库连接)进行事务管理,在spring中是对JdbcTemplate进行事务管理 扩展: HibernateTransactionManager:是对Hibernate进行事务管理,当在spring中使用Hi…

可以。以下为代码:

import com.atomikos.icatch.jta.UserTransactionManager

import com.atomikos.jdbc.AtomikosDataSourceBean

import javax.jta.TransactionManager

import javax.sql.DataSource

public class AtomikosExample {

// Atomikos implementations

private static UserTransactionManager utm

private static AtomikosDataSourceBean adsb

// Standard interfaces

private static TransactionManager tm

private static DataSource ds

// initialize resources

private static void init() {

UserTransactionManager utm = new UserTransactionManager()

utm.init()

tm = utm

adsb = …// omitted for clarity

ds = adsb

}

// release resources

private static void shutdown() {

adsb.close()

utm.close()

}

public static void main(String[] args) {

init()

tm.begin()

Connection c = ds.getConnection()

// use connection to execute SQL

c.close()

tm.commit()

shutdown()

}

}

以上就是关于spring的@Transactional为什么不能指定TransactionManager全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

用过spring的人应该都使用过@Transactional注解了 在只有一个TransactionManager时没有问题 配置如下: J…
查看详情
用过spring的人应该都使用过@Transactional注解了 在只有一个TransactionManager时没有问题 配置如下: J…
查看详情
用过spring的人应该都使用过@Transactional注解了 在只有一个TransactionManager时没有问题 配置如下: J…
查看详情
相关文章
推荐游戏
风之谷
风之谷
游戏资讯 10.5M
下载
斗罗大陆3
斗罗大陆3
游戏资讯 566.9M
下载
冠军网球
冠军网球
游戏资讯 148.1M
下载
最佳炮手
最佳炮手
游戏资讯 68.1M
下载
如梦下弦月
如梦下弦月
游戏资讯 840.1M
下载
富甲封神传
富甲封神传
游戏资讯 263.0M
下载