数据库连接边界与事务边界

时间:2020-03-14 18:16:21

标签: spring jpa transactions spring-transactions

我的问题是数据库连接边界与事务边界

我不问在哪里放置@transactional注释。我需要知道 甚至对执行的@transactional方法进行编码,之后还使用db connection / lock还是 不?

故事
我的一个项目遇到了很多数据库连接问题。当网络流量很高时,这些不会释放。 因此,我需要了解事务注释用法的最佳实践。 另外,我需要详细说明用@Transactional | | | | | | | | ||||||||||||||||||||||||||||||||||||||||||||||||| $ 3。

什么是数据库连接?什么是锁?都相等吗? 我在询问有关获取锁的信息。获取锁的时间和释放锁的时间。

我有两种从事务方法返回数据的方法。

  • 保存并返回实体

  • 保存并返回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; 

    }

}

0 个答案:

没有答案
相关问题