事务

2020-08-06  本文已影响0人  蜗小稂

配置好spring事务的设置

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
          destroy-method="close" parent="abstractDataSource">
        <property name="url" value="${druid.datasource.url}"/>
        <property name="username" value="${druid.datasource.username}"/>
        <property name="password" value="${druid.datasource.password}"/>
    </bean>

<bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
          p:dataSource-ref="dataSource"/>

    <!-- For fine-grain transaction, programmatic transaction -->
    <bean id="transactionTemplate"
          class="org.springframework.transaction.support.TransactionTemplate"
          p:transactionManager-ref="transactionManager"/>

直接在试用方法前面加上 @Transactional注解就可以使用事务的功能,当该方法下的任意一个sql执行报错,整体就会回滚;

因为事务的本质是会监控sql执行时抛出来的RuntimeException,如果抛出就执行回滚操作,当抛出是非RuntimeException就不会回滚了;
如果想其他异常也会执行回滚操作可以使用rollbackFor = Exception.class 参数。
例子如下:

  @GetMapping("/saveTryCatch")
    @Transactional( rollbackFor = Exception.class)
    public void saveTryCatch() throws Exception{
            int age = random.nextInt(100);
            User user = new User().setAge(age).setName("name:"+age);
            userService.save(user);
            throw new Exception();
    }

由于我们知道是根据监控异常来的,我们直接使用try-catch肯定不行,这里只要监控到异常,就会将插数据操作就会回滚;

上一篇 下一篇

猜你喜欢

热点阅读