spring管理事务

    xiaoxiao2021-03-25  141

    数据库连接池:

    <bean id="dataSource" class="" > <property name="url" value="${jdbc.url}" /> <property name="username"><value>${jdbc.username}</value></property> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driverClassName}"></property> <property name="maxActive"><value>50</value></property> <property name="initialSize"><value>5</value></property> <property name="maxWait"><value>60000</value></property> <property name="minIdle"><value>5</value></property> </bean> 创建sqlsessionFactory:

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:sqlMap/sqlMapConfig.xml"></property> </bean> 事务管理器:

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>

    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> 声明式事务:

    <tx:advice id="txadvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" progatation="REQUIRED"/> <tx:attributes> </tx:advice>progatation是传播规则:

    1.MANDATORY:表示当前方法要在事务中,事务不存在抛异常。

    2.NESTED:存在事务则嵌套在事务中执行,可以独立于当前事务单独的提交或回滚。

    3.NEVER:不在事务中执行,如果有事务就抛异常。 4. NOT_SUPPORTED:不在事务中执行,如果有事务,在执行这个方法时,事务被挂起。

    5.REQUIRED:在事务中运行,如果事务不存在就启动一个事务,常用。

    6.SUPPORTS:不需要事务,但是如果有就在事务中运行。

    7.REQUIRES_NEW:有当前事务则当前事务挂起,在自己的事务中运行,如果没有当前事务就启动一个事务执行。

    isolation属性:

    1.Default:使用数据库默认级别。

    2.READ_UNCOMMITTED

    3.READ_COMMITTED

    4.REPEATABLE_READ

    5.SERIALIZABLE

    read_only属性:指定事务为只读

    rollback-for:指定事务那些检查型异常会回滚而不提交。

    no-rollback-for:指定那些异常应该继续执行而不回滚。

    timeout:指定事务超时时间。

    这里只是定义个一个通知,还要定义切面:

    <aop:config> <aop:advisor pointcut="" advice-ref="txadvice"/> </aop:config> 除了tx:advice外还可以注解驱动事务:

    <tx:annotation-driven transaction-manager="ttransactionManager"/>这个注解会扫描@Transactional。

    @Transactional(progatatiob=Progatation.supports,readOnly=true) public class AServiceImpl implements AService{ @Transactional(progatation=Progatation.REQUIRED,readOnly=true) public void save(User user){ } }

    转载请注明原文地址: https://ju.6miu.com/read-8303.html

    最新回复(0)