[英]@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})
。 当数据被一一插入时,如果数据库级别出现问题,那么它应该回滚,但最终不会发生。 我也尝试在类级别添加注释,但没有运气。 请让我知道我是否遗漏了什么?
你在这里混淆了几件事。
你的代码应该是这样的,这就够了。
@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.