0
我是新的春天,我正試圖學習如何使用它的事務上下文。如何通過@Transactional註釋來管理傳播和隔離
我有一個從文件讀取的服務,堅持少數實體bean
@Service
public class MyServiceImpl{
@Autowired
MyObjectService myObjectService;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void readFromFile() throws Exception {
//Do something
checkAndSave();
}
public void checkAndSave() throws Exception {
List<MyObject> objects = myObjectService.readAll();
for(MyObject myObject : objects){
boolean check1 = myObjectService.check1();
if(check1){
myObjectService.save(myObject);
}
}
}
}
@Service
public class MyObjectServiceImpl implements MyObjectService{
@Repository
MyObjectRepository myObjectRepository
@Transactional(readOnly=true)
public List<MyObject> readAll(){
myObjectRepository.findAll()
}
@Transactional(readOnly=true)
public boolean check1(){
//run a few select to check somethings
}
}
我的問題是:
的方法checkAndSave將在交易中運行? checkAndSave方法將在readFromFile方法的同一事務中運行?
而且我注意到,如果我將@Transactional註釋放在readFromFile方法上,應用程序比沒有註解運行需要更長的時間。
爲什麼?
爲底層數據存儲提供應用這些優化的機會。但也許一起閱讀只有我也應該使用傳播屬性? – Skizzo