Spring中声明式事务控制
一、Spring中声明式事务控制
声明式事务的配置xml和注解混合搭配使用的环境搭建源码:https://github.com/Cqypyglz/springTx
二、基于XML的声明式事务的配置
1.下面为具体代码的解释
<!--配置业务层--> <bean id="accountService" class="com.li.service.impl.AccountServiceImpl"> <property name="accountDao" ref="accountDao"></property> </bean> <!--配置账户的持久层--> <bean id="accountDao" class="com.li.dao.impl.AccountDaoImpl"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置jdbcTemplate--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql:///spring"></property> <property name="username" value="root"></property> <property name="password" value="123"></property> </bean> <!--spring中基于xml的声明式事务控制配置步骤 1.配置事务管理器 2.配置事务通知 需要导入事务的约束,tx名称空间和约束,同时也需要aop 使用tx:advice标签配置事务通知 属性: id:事务的唯一标志 transaction-manager:给事务通知提供事务管理器引用 3.配置aop中的通用切入点表达式 4.建立事务通知和切入点表达式的对应关系 5.配置事务的属性 是在tx:advice标签内部 --> <!--配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置事务的通知--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!--配置事务的属性 isolation:用于指定事务的隔离级别,默认DEFAULT,表示使用数据库的默认隔离级别 propagation:用于指定事务的传播行为,默认值REQUIRED,表示一定会有事务,增删改的选择,查询方法也可选择SUPPORTS read-only:用于指定事务只读,只有查询方法才能设置为true,默认值为false,表示读写 timeout:用于指定事务的超时时间,默认值-1,永不超时,如果指定了数值,以秒为单位 no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚,没有默认值,表示任何异常都回滚 rollback-for:用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚,没有默认值,表示任何异常都回滚 --> <tx:attributes> <tx:method name="*" propagation="REQUIRED" read-only="false"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method> </tx:attributes> </tx:advice> <!--配置aop--> <aop:config> <!--配置切入点表达式--> <aop:pointcut id="pt1" expression="execution(* com.li.service.impl.*.*(..))"/> <!--建立事务通知和切入点表达式的对应关系--> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor> </aop:config>
二、基于注解的声明式事务的配置
<!--spring中基于注解的声明式事务控制配置步骤 1.配置事务管理器 2.开启spring对注解事务的支持 3.在需要事务支持的的地方法使用@Transactional --> <!--配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--开启spring对注解事务的支持--> <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>