0

My Question is with DB connection Boundry vs Transaction Boundry

I am not asking, where to put @transactional annotation. I need to know even code the executed @transactional method, After that also Is it using db connection/lock or not?

Story
I have faced problem with one of my project is consuming lot of DB connections. And those are not releasing when web-traffic is high. So I need to know the best practice of transactional annotation usage. Also, I need Detail Explanation Lock/DB connection with @Transactional |

what is DB connection? What is lock ? are both equal? I am asking about lock acquiring.when the lock is acquiring and when the lock is releasing.

I have 2 approaches to return data from the transactional method.

  • save and return entity

  • save and return DTO

which is the better approach by considering DB connection/lock perspective.

controller layer

@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 layer

========================

@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; 

    }

}
Sanka
  • 1,294
  • 1
  • 11
  • 20
  • Does this answer your question? [Where does the @Transactional annotation belong?](https://stackoverflow.com/questions/1079114/where-does-the-transactional-annotation-belong) – mohammedkhan Mar 14 '20 at 19:13
  • @mohammedkhan no.I am not asking, where to put transactional annotation. I need to know even code the executed transactional method, After that also Is it using db connection/lock or not? – Sanka Mar 15 '20 at 11:19

0 Answers0