您好,登錄后才能下訂單哦!
小編給大家分享一下spring boot基于注解聲明式事務配置的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
1)開啟spring事務管理,在spring boot啟動類添加注解@EnableTransactionManagement(proxyTargetClass = true);等同于xml配置方式的 <tx:annotation-driven />(注意:1項目中只需配置一次,2需要配置proxyTargetClass = true)
2)在項目中需要添加事務的類或方法上添加注解@Transactional(建議添加在方法上),一般使用默認屬性即可,若要使用事務各屬性可查看spring事務官方文檔了解
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”)
使用注解模式不需要配置文件,也不需要配置事務配置類或者方法,只需要使用“@Transcation”注解引入到相對應的位置即可實現事務回滾功能。
<!-- 事物 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </dependency>
因為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基于注解聲明式事務配置的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。