Граница соединения с БД и граница транзакции - PullRequest
0 голосов
/ 14 марта 2020

Мой вопрос с подключением к БД 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; 

    }

}
...