簡體   English   中英

@Transactional 回滾在 Spring Boot 應用程序中不起作用?

[英]@Transactional rollback is not working in spring boot application?

我有一個要求,我需要將一些員工數據插入 db2 數據庫,下面是代碼:

@Log4j2
@Service
@Transactional
public class EmployeeServiceImpl extends EmployeeService{

@Autowired
private EmployeeDataRepository employeeDataRepository;

@Override
@Transactional(rollbackOn = {DataAccessException.class})
public void insertEmployeeData(List<Employee> employeeList){
 try{
     employeeDataRepository.insertEmployeeData(employeeList);
    }catch(DataAccessException ex){
      log.error("Exception whie inserting data in db {}",ex.getMessage());
    }
}
@Log4j2
@Repository
public class EmployeeDataRepositoryImpl implements EmployeeDataRepository{

@Autowired
private DataSource dataSource;

@Value("${db.schema}")
private String schema;

@Override
public void insertEmployeeData(List<Employee> employeeList){
   this.jdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("Employee");
   for(Employee emp : employeeList){
    Map<String,Object> parameters = new HashMap<String,Object>();
      parameters.put("name", emp.name);
      parameters.put("age", emp.age);
      parameters.put("dateOfJoining", emp.dateOfJoining);
      parameters.put("address", emp.address);
      parameters.put("salary", emp.salary);
      jdbcInsert.execute(parameters);
      log.info("Created Record Name = " + name + " Age = " + age + " dateOfJoining = "+dateOfJoining);
      }
      return;
}

} 

使用 spring 數據源屬性配置數據源並將其注入到EmployeeDataRepositoryImpl類中。 我正在使用SimpleJdbcInsert將數據插入到 db2 表中。 對於跨國處理,我在方法上使用@Transactional(rollbackOn = {DataAccessException.class}) 當數據被一一插入時,如果數據庫級別出現問題,那么它應該回滾,但最終不會發生。 我也嘗試在類級別添加注釋,但沒有運氣。 請讓我知道我是否遺漏了什么?

你在這里混淆了幾件事。

  1. 如果(運行時)異常通過您的 @Transactional 方法冒泡,Spring 會回滾您的事務
  2. 您正在捕獲 DataAccessException 異常,從而防止回滾。
  3. 也不需要在 rollbackOn 中指定異常。

你的代碼應該是這樣的,這就夠了。

@Transactional
public void insertEmployeeData(List<Employee> employeeList){
  employeeDataRepository.insertEmployeeData(employeeList);
}

有關@Transactional 如何工作的更多信息,請參閱此鏈接。

嘗試 rollBackFor 而不是 rollBackOn

按照以下鏈接: https : //github.com/spring-projects/spring-boot/issues/12709

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM