@Service
@Slf4j
public class XXXService extends BaseService<XXX, Long>{
@Resource
private XXXRepository XXXRepository;
@Resource
private PlatformTransactionManager platformTransactionManager;
public void findAndSave(....) {
for(...){
...
List<XXX> xxxList=find...;
saveAll(xxxList);
}
}
@Transactional(readOnly = false)
public void saveAll(List<XXX> xxxList) {
DefaultTransactionDefinition transactionDefinition=new DefaultTransactionDefinition();
transactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
TransactionStatus status = platformTransactionManager.getTransaction(transactionDefinition);
try {
........
XXXRepository.saveAll(xxxList);
platformTransactionManager.commit(status);
} catch (Exception e) {
System.out.println("==========================事务回滚==============================");
System.out.println(e.getMessage());
platformTransactionManager.rollback(status);
throw e;
}
}
注意:由于saveAll方法为内部调用,常用private\protect修饰。但Transactional只对public修饰的方法事务才有效。