亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring boot基于注解聲明式事務配置的示例分析

發布時間:2021-08-09 13:50:26 來源:億速云 閱讀:112 作者:小新 欄目:開發技術

小編給大家分享一下spring boot基于注解聲明式事務配置的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

事務配置

1、配置方式一

1)開啟spring事務管理,在spring boot啟動類添加注解@EnableTransactionManagement(proxyTargetClass = true);等同于xml配置方式的 <tx:annotation-driven />(注意:1項目中只需配置一次,2需要配置proxyTargetClass = true)

2)在項目中需要添加事務的類或方法上添加注解@Transactional(建議添加在方法上),一般使用默認屬性即可,若要使用事務各屬性可查看spring事務官方文檔了解

2、配置方式二(指定事務,需要多個事務管理器時用)

1)開啟事務管理:創建多個事務,如下例子

@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class TransactionConfig implements TransactionManagementConfigurer{
    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.druid.url}")
    private String url;
    @Value("${spring.datasource.druid.username}")
    private String username;
    @Value("${spring.datasource.druid.password}")
    private String password;
    @Bean
    public DataSource dataSourceDb() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
    /**
     * 【作用】事務管理器<br>
     * 【說明】(無)
     * @param
     * @author Kalvin
     * @Date 2017/12/19 10:39
     */
    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSourceDb());
    }
    // 創建事務管理器2
    @Bean(name = "txManager2")
    public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
        return new JpaTransactionManager(factory);
    }
    /**
     * 【作用】如果沒有指定事務,默認返回當前事務管理<br>
     * 【說明】(無)
     * @param
     * @author kkyc
     * @Date 2017/12/19 10:03
     */
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return transactionManager();
    }
}

到這里已經成功整合好事務配置了,你只需要在使用的地方添加注解@Transactional即可,如果需要限定事務管理器,可使用@Transactional(“txManager2”)

spring boot事務(注解模式)

使用注解模式不需要配置文件,也不需要配置事務配置類或者方法,只需要使用“@Transcation”注解引入到相對應的位置即可實現事務回滾功能。

1.引入pom.xml

  <!-- 事物 -->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
     </dependency>

2.在controller里面使用事務注解

因為service和接口層都是直接操作數據庫的方法,一般需要多個操作或者循環的Controller才需要事務支持,如果是mybatis批量操作數據庫語句也不需要事務

事務作用域一般常見的分成兩種:

①定義在類上面 :所有的方法都支持事務

②定義在方法上 :只有該方法支持事務

package com.Transaction.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.Transaction.entity.Alarmtype;
import com.Transaction.mapper.AlarmtypeMapper;
import com.Transaction.service.AlarmtypeService;
@Controller
//@Transactional //事務級別,如果該類中同時操作多個方法,只要失敗則全部回滾
public class AlarmtypeController {
 @Autowired
 AlarmtypeMapper alarmtypeMapper;
 
 @Autowired
 AlarmtypeService alarmtypeService;
 
 @RequestMapping("index")
 public synchronized String index(){
  //List<Alarmtype> list = alarmtypeMapper.getAlarmtypeList();
  List<Alarmtype> list = alarmtypeService.findAll();
  for (int i = 0; i < list.size(); i++) {
   System.out.println(list.get(i).getId()+"--"+list.get(i).getAlarmname());
  }
  return "index";
 }
 
 //批量插入
 @RequestMapping("addBatch")
 @ResponseBody
 @Transactional//對整個方法進行事務處理,方法體內只要有一個方法沒執行成功則全部回滾
 public synchronized int addBatch(){
  Alarmtype alarmtype = new Alarmtype();
  Alarmtype updatealarmtype = new Alarmtype();
  updatealarmtype.setId(1);
  updatealarmtype.setAlarmname("修改前輪故障");
  alarmtypeMapper.updateAlarmtypeById(updatealarmtype);
  int result = 0;
  try {
   for (int i = 0; i < 5; i++) {
    if(i==2){
     //alarmname在數據庫中長度不超過50,賦值超過50報異常 Data too long
     alarmtype.setAlarmname("測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試測試");
     alarmtype.setAlarmtypeid(i);
    }else{
     alarmtype.setAlarmname("測試"+i);
     alarmtype.setAlarmtypeid(i);
    }
    result = alarmtypeMapper.addAlarmtype(alarmtype);
   }
  }catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 
 @RequestMapping("test")
 @ResponseBody
 public synchronized String test(){  
  return "test";
 }
}

看完了這篇文章,相信你對“spring boot基于注解聲明式事務配置的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

焦作市| 三江| 丹东市| 台江县| 盘锦市| 临桂县| 昌吉市| 交口县| 遂川县| 墨江| 高邮市| 珲春市| 新昌县| 辽宁省| 尉犁县| 乌拉特前旗| 昭苏县| 辉南县| 琼海市| 永善县| 西城区| 赣榆县| 浮梁县| 景德镇市| 陆川县| 大庆市| 涟源市| 东乌珠穆沁旗| 忻城县| 迁安市| 温泉县| 玉门市| 沈丘县| 石楼县| 赤水市| 玛曲县| 抚顺市| 扶风县| 巨野县| 永年县| 辉县市|