spring 事务 @Transactional注解参数 tx:annotation-driven
来源:互联网 发布:js输入框 input span 编辑:程序博客网 时间:2024/04/30 23:02
首先修改applicationContext.xml如下:
…<!-- 定义一个数据源 --><bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/spring_test" /> <property name="username" value="root" /> <property name="password" value="root" /></bean><!-- 定义JdbcTemplate的Bean --><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" p:dataSource-ref="dataSource"></bean><!-- 配置事务管理器 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource"></bean><!-- enables scanning for @Transactional annotations --><tx:annotation-driven transaction-manager="txManager" /><!-- 在该Bean的代码中标注@Transactional可以被事务管理器注入 --><bean id="userScore" class="net.hingyi.springDemo.transaction.service.UserScoreServiceImpl" p:userScoreRepository-ref="userScoreRepository_jdbc" /><bean id="userScoreRepository_jdbc" class="net.hingyi.springDemo.transaction.repository.UserScoreRepositoryImpl" p:jdbcTemplate-ref="jdbcTemplate" />…
实现类代码:
@Transactionalpublic class UserScoreRepositoryImpl implements UserScoreRepository {private JdbcTemplate jdbcTemplate;@Overridepublic UserScore getUserSocore(String userNo) {final UserScore us = new UserScore();...return us;}...}OK了!以上就实现了简单的事务管理了。现在再稍微了解下@Transactional。
在配置文件中,默认情况下,<tx:annotation-driven>会自动使用名称为transactionManager的事务管理器。
所以,如果定义的事务管理器名称为transactionManager,那么就可以直接使用<tx:annotation-driven/>。如下:
<!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource"></bean><!-- enables scanning for @Transactional annotations --><tx:annotation-driven/><tx:annotation-driven>一共有四个属性如下,
- mode:指定Spring事务管理框架创建通知bean的方式。可用的值有proxy和aspectj。前者是默认值,表示通知对象是个JDK代理;后者表示Spring AOP会使用AspectJ创建代理
- proxy-target-class:如果为true,Spring将创建子类来代理业务类;如果为false,则使用基于接口的代理。(如果使用子类代理,需要在类路径中添加CGLib.jar类库)
- order:如果业务类除事务切面外,还需要织入其他的切面,通过该属性可以控制事务切面在目标连接点的织入顺序。
- transaction-manager:指定到现有的PlatformTransaction Manager bean的引用,通知会使用该引用
@Transactional注解可以标注在类和方法上,也可以标注在定义的接口和接口方法上。
如果我们在接口上标注@Transactional注解,会留下这样的隐患:因为注解不能被继承,所以业务接口中标注的@Transactional注解不会被业务实现类继承。所以可能会出现不启动事务的情况。所以,Spring建议我们将@Transaction注解在实现类上。
在方法上的@Transactional注解会覆盖掉类上的@Transactional。
使用不同的事务管理器
如果我们要程序中使用多个事务管理器(主要是针对多数据源的情况),可以通过以下的方式实现:
Service代码:
public class MultiTxService {@Transactional("tran_1")public void addTest(int id){}@Transactional("tran_2")public void deleteTest(int id){}}applicationContext.xml配置如下:
<bean id="tran_1"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource"><qualifier value="tran_1"/></bean><bean id="tran_2"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource"><qualifier value="tran_2"/></bean>经过以上的代码,每个事务都会绑定各自的独立的数据源,进行各自的事务管理。我们可以优化下以上代码,可以自定义一个绑定到特定事务管理器的注解,然后直接使用这个自定义的注解进行标识:
@Target({ElementType.METHOD,ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Transactional("tran_1")public @interface CustomerTransactional {}在Service代码中使用:
...//使用名为tran_1的事务管理器@CustomerTransactionalpublic void addTest(String str){}…
0 0
- spring 事务 @Transactional注解参数 tx:annotation-driven
- spring 事务 @Transactional注解参数 tx:annotation-driven
- spring 事务 @Transactional注解参数 tx:annotation-driven
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- 关于Spring事务<tx:annotation-driven/>的理解。
- 关于Spring事务<tx:annotation-driven/>的理解
- spring中的<tx:annotation-driven>
- spring配置事务 元素 "tx:annotation-driven" 的前缀 "tx" 未绑定
- <tx :annotation-driven> <mvc: annotation-driven >注解理解
- spring 事务 @Transactional注解参数详解
- spring 事务注解@Transactional
- spring 事务注解@Transactional
- spring 事务注解@Transactional
- Spring注解事务@Transactional
- Spring 注解@Transactional 事务
- JSP小结-Cookie与Session
- Java开发环境问题
- CircleProgressBar 带载入动画的环形进度条
- Java compiler level does not match the version
- 【整理】不熟悉的git命令
- spring 事务 @Transactional注解参数 tx:annotation-driven
- MyBatis入门配置
- Java过滤器与SpringMVC拦截器之间的关系与区别
- Java工作笔记(一)
- Android基础 —— Broadcast 使用
- lua 自学笔记 练习篇-学生成绩管理系统之学生文档
- Lucene 工作原理
- [Telecom] Telecom相关收藏
- listView点击选中时候,item不变色