Мой вопрос с подключением к БД Boun dry против Boun транзакции dry
Я не спрашиваю, куда положить аннотацию @transactional. Мне нужно знать даже код исполняемого метода @transactional, после этого также используется ли соединение / блокировка БД или нет?
История Я столкнулся с проблемой, когда один из моих проектов потребляет много соединений с БД. И они не выпускаются, когда web-traffi c высокий. Поэтому мне нужно знать лучшие практики использования транзакционных аннотаций. Также мне нужно подробное объяснение Блокировка / соединение с БД с помощью @Transactional |
что такое соединение с БД? Что такое замок? оба равны? Я спрашиваю о получении блокировки. При получении блокировки и при снятии блокировки.
У меня есть два подхода для возврата данных из транзакционного метода.
save и вернуть сущность
сохранить и вернуть DTO
, что является лучшим подходом с учетом подключения к БД / перспективы блокировки.
уровень контроллера
@Controller
public class QuoteController {
@RequestMapping(value ="", method = RequestMethod.POST)
public String saveAllGetSampleClass4(QuoteDTO quoteDTO, RedirectAttributes redirectAttributes) {
quoteService.saveAllGetSampleClass4(quoteDTO.quoteId, quoteDTO.userId);
}
@RequestMapping(value ="", method = RequestMethod.POST)
public String saveAllGetSampleClass4DTO(QuoteDTO quoteDTO, RedirectAttributes redirectAttributes) {
quoteService.saveAllGetSampleClass4DTO(quoteDTO.quoteId, quoteDTO.userId);
}
}
уровень службы
=======================
@Service
public class QuoteService {
@Transactional
public SampleClass4 saveAllGetSampleClass4(Long quoteId, Long userId) {
SampleClass1 sampleClass1 = new SampleClass1();
sampleClass1.setQuoteId(quoteId);
sampleRepository1.saveAndFlush(sampleClass1);
SampleClass2 sampleClass2 = new SampleClass2();
sampleClass2.setQuoteId(quoteId);
sampleRepository2.saveAndFlush(sampleClass2);
SampleClass3 sampleClass3 = new SampleClass3();
sampleClass3.setQuoteId(quoteId);
sampleRepository3.saveAndFlush(sampleClass3);
SampleClass4 sampleClass4 = new SampleClass4();
sampleClass4.setQuoteId(quoteId);
sampleClass4=sampleRepository4.saveAndFlush(sampleClass4);
}
@Transactional
public SampleClass4DTO saveAllGetSampleClass4DTO(Long quoteId, Long userId) {
SampleClass1 sampleClass1 = new SampleClass1();
sampleClass1.setQuoteId(quoteId);
sampleRepository1.saveAndFlush(sampleClass1);
SampleClass2 sampleClass2 = new SampleClass2();
sampleClass2.setQuoteId(quoteId);
sampleRepository2.saveAndFlush(sampleClass2);
SampleClass3 sampleClass3 = new SampleClass3();
sampleClass3.setQuoteId(quoteId);
sampleRepository3.saveAndFlush(sampleClass3);
SampleClass4 sampleClass4 = new SampleClass4();
sampleClass4.setQuoteId(quoteId);
sampleClass4=sampleRepository4.saveAndFlush(sampleClass4);
SampleClass4DTO dto=SampleClass4DTO.valueOf(sampleClass4);
return dto;
}
}