MS Lesson14: @Transactional

1. Lost update nedir?

Iki tranzaksiya eyni setri oxuyur ve her ikisi ayriliqda deyishir, sonra son yazan evvelkinin deyishikliklerini "ustunden yazir" ve evvelki update itir.


package guru.springframework.cruddemo.service.impl;

import guru.springframework.cruddemo.entity.Account;
import guru.springframework.cruddemo.repository.AccountRepository;
import guru.springframework.cruddemo.service.AccountService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
@RequiredArgsConstructor
public class AccountServiceImpl implements AccountService {

private final AccountRepository repository;

@Override
public void transfer(Integer amount) {
log.info("---> Start transfer: thread: {}", Thread.currentThread().getName());
Account from = repository.findById(1L).get();
log.info("---> From account {}, thread: {}", from.getName(), Thread.currentThread().getName());

try {
Thread.sleep(5000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}

Account to = repository.findById(2L).get();
log.info("---> To account {}, thread: {}", to.getName(), Thread.currentThread().getName());
from.setAmount(from.getAmount() - amount);
log.info("---> Update account {}, thread: {}", from.getName(), Thread.currentThread().getName());
repository.save(from);
log.info("---> Saving account, thread: {}", Thread.currentThread().getName());

to.setAmount(to.getAmount() + amount);
log.info("---> Update account {}, thread: {}", to.getName(), Thread.currentThread().getName());
repository.save(to);
log.info("---> Saving account, thread: {}", Thread.currentThread().getName());
}

} 






















Комментарии

Популярные сообщения из этого блога

Interview questions

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java