1. 程式人生 > 其它 >Springboot操作資料庫 事務回滾

Springboot操作資料庫 事務回滾

技術標籤:程式碼

操作sqlserver資料庫時,比如新增、更新操作。而當sqlserver出現錯誤或異常時,需要將已經執行的操作撤回。

  • 在service層中設定資料庫的回滾
    通過@Transactional註解
@Service
@Transactional
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Autowired
	private RedisTemplate redisTemplate;
	
	@Override
	@Transactional
(rollbackFor = Exception.class) public int addUser(User user) { try { // 新增user1 userMapper.addUser(user); // 新增user2 重複新增相同資料,此時出現"主鍵重複"錯誤 userMapper.addUser(user); } catch (Exception e) { //e.printStackTrace(); // 資料庫回滾操作 TransactionAspectSupport.currentTransactionStatus
().setRollbackOnly(); return 0; } // 新增成功後,將資料寫入redis資料庫 redisTemplate.opsForHash().put("userHash", user.getId(), user); return 1; } }

當沒有使用“TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();”執行回滾操作時,“新增user1”的語句已經執行,資料庫中存在user1的資料。使用回滾操作後,因為“新增user2”出現異常,雖然“新增user1”執行成功,但user1沒有寫入資料庫。


  • 啟動類中需要添加註解@EnableTransactionManagement
@SpringBootApplication
@EnableTransactionManagement
public class StartApplication {
	public static void main(String[] args) throws Exception {
		SpringApplication.run(StartApplication.class, args);
	}
}