我的问题是数据库连接边界与事务边界
我不问在哪里放置@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;
}
}