Middle
Šta je anotacija @Transactional u kontekstu Jave?
sobes.tech АИ
Одговор од АИ
Аннотација @Transactional у Јави се користи за декларативно управљање трансакцијама. Она омогућава одређивање граница трансакција, указујући које методе треба да се извршавају у оквиру једне трансакције.
Главни аспекти:
- Интеграција: Најчешће се користи у комбинацији са Spring Framework-ом, EJB-ом или другим оквирима који пружају управљање трансакцијама.
- Проксирање: Оквир креира прокси-објекат који обавија циљни објекат са анотираним методама. Пре позива анотираног метода, прокси почиње трансакцију, а након његовог извршења, фиксира или враћа трансакцију у зависности од резултата (да ли је изузеће изазвано).
- Атрибути: Има различите атрибуте за конфигурацију понашања трансакције, као што су:
propagation: одређује како ће се понашати трансакциони метод приликом позива из другог трансакционог контекста. На пример,REQUIRED,REQUIRES_NEW,SUPPORTS,NOT_SUPPORTED,NEVER,MANDATORY.isolation: одређује ниво изолације за трансакцију. На пример,READ_COMMITTED,READ_UNCOMMITTED,REPEATABLE_READ,SERIALIZABLE.readOnly: указује да се трансакција извршава само за читање података, што понекад омогућава оптимизацију перформанси.timeout: поставља време чекања за трансакцију.rollbackForиnoRollbackFor: указују на то која изузећа треба да доведу до враћања или не враћања трансакције.
Пример коришћења:
// Пример коришћења у Spring-у
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
// Овај метод ће се извршавати у оквиру трансакције
@Transactional
public void createUser() {
// Логика креирања корисника и чувања у базу података
// Ако се изазове RuntimeException, Spring ће враћати трансакцију
}
// Овај метод ће се извршавати у оквиру трансакције са одређеним подешавањима
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public User findUserById(Long id) {
// Логика претраге корисника
return null; // Пример
}
}
@Transactional поједностављује управљање трансакцијама, омогућавајући програмеру да се фокусира на пословну логике, а не на ниско ниво API-ја управљања трансакцијама (нпр. JTA или JDBC Connection).