Я читал об управлении транзакциями весной, используя аннотацию @Transactional в наших методах обслуживания или классе обслуживания и настраивая нашу транзакцию с ее атрибутами распространения, изоляции, таймаута, readOnly. Теперь я задаю вопрос:Синхронизация и @Transactional меня смущает
1) Нужно ли использовать синхронизацию (используя синхронизированное ключевое слово) или многопоточность, если мы используем @Transactional для достижения свойств ACID?
2) Какими могут быть различные сценарии, по-прежнему использующие многопоточность java в нашем веб-приложении Java EE?
3) Если требуется многопоточность, какой слой нашего приложения должен использовать синхронизированные методы или блоки и каковы могут быть причины этого?
Я изучаю с помощью фиктивного проекта онлайн-банкинга, который я нашел в github. Поэтому было бы неплохо, если бы ответы были связаны с этим сценарием. Так вот мои классы (просто чтобы дать вам идею):
//Here are some entity classes
@Entity общественного класса User {...}
@Entity pulic класса Account {...}
@Entity класса Card общественного {...}
@Entity общественный класс Операция {...}
// now some DAO examples
общественного класс OperationDaoImpl реализует OperationDao {
Page findNonCardByAccountIdAndYearMonth (Integer ACCOUNTID, годМесяц годМесяца, выгружаемый выгружаемый) {...}
Page findTransferByAccountId (Integer ACCOUNTID, выгружаемые выгружаемая) {...} DateTime getLastOperationDate() {...}
}
// now some service examples
@Service
@Transactional (доступен только для чтения = истина)
@Validated
общественного класса BankServiceImpl реализует BankService {
общественности Карта sumResolvedCardOperationsByAccountIdAndYearMonth (Integer ACCOUNTID, годМесяц годМесяц) {...}
@Transactional (readOnly = false)
public void performTransfer (Integer debitedAccountId, Integer creditedAccountId, @Min (10) BigDecimal сумма) бросает UnsufficientBalanceException {...}
}
// и есть весна-контроллеры MVC.
Ребята! извините за то, что этот вопрос так долго.Любое предложение приветствуется. Благодарю.
JB Nizet Спасибо, что освободили это. Но если возможно, вы могли бы очистить мое замешательство по поводу моего третьего вопроса (я изменил его часть). Я знаю, что это может быть длинный ответ. Если возможно, пришлите мне ссылку для изучения. –
Пока у вас нет общего состояния, к которому нужно обращаться по одному потоку за раз, вам не нужна синхронизация. –