1.spring基于XML的声明式事务环境搭建
(1)创建java项目,导入jar包
包括IOC,AOP,数据库驱动,以及数据库事务相关:
合计如下:
(2)创建模拟的service和dao
(3)创建bean.xml。添加beans,aop,tx的名称空间
配置servcie和dao的bean以及配置spring内置数据源
(4)配置spring的声明式事务控制
<!-- spring基于XML的声明式事务控制 --> <!-- 第一步 配置事务管理器 --> <bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入数据源 --> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 第二步:配置事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 第四步 配置事务属性 isolation:配置事务隔离级别,默认值是DEFAULT,使用数据库的默认隔离级别。mysql数据库是REPEATABLE_READ propagation:配置事务传播行为。默认值是REQUIRED,一般的选择,适用增删改方法,当时查询方法时使用SUPPORTS read-only:配置是否只读事务,默认值false,读写型事务。当指定为true时,只读事务,只能用于查询方法 timeout:指定事务的超时时间。默认值是-1,永不超时,当指定其他值时,以秒为单位 rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚,当产生其他异常时,事务不回滚。没有默认值,任何异常都回滚 no-rollback-for:用于指定一个异常,当执行产生该异常时,事务不回滚,当产生其他异常时,事务回滚。没有默认值,任何异常都回滚 --> <tx:attributes> <!-- 通配查询方法 优先级较高 --> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <!-- 通配增删改方法 --> <tx:method name="*" propagation="REQUIRED" read-only="false"/> </tx:attributes> </tx:advice> <!-- 第三步 配置AOP--> <aop:config> <!-- 配置切入点表达式 --> <aop:pointcut expression="execution(* com.huaiwei.service.impl.*.*(..))" id="pt1"/> <!-- 配置切入点表达式和事务通知的关联关系 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/> </aop:config>