якщо хтось може пояснити, що робить це анотація і коли саме ми його використовуємо:
@Transactional(propagation=Propagation.REQUIRED)
Дякую
якщо хтось може пояснити, що робить це анотація і коли саме ми його використовуємо:
@Transactional(propagation=Propagation.REQUIRED)
Дякую
Відповіді:
Коли параметр розповсюдження є PROPAGATION_REQUIRED, для кожного методу, за допомогою якого застосовується налаштування, створюється логічна область транзакцій. Кожна така логічна область транзакцій може визначати статус лише відкату окремо, при цьому зовнішня область транзакцій є логічно незалежною від внутрішньої області транзакцій. Звичайно, у випадку стандартної поведінки PROPAGATION_REQUIRED, всі ці сфери дії будуть відображені в одній фізичній транзакції. Таким чином, маркер, призначений лише для відкату, встановлений у внутрішній області транзакцій, впливає на шанс зовнішньої транзакції фактично здійснити (як ви цього очікували).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Якщо вам потрібно пояснити використання лайманс, що виходить за рамки, передбачені у Весняних документах
Розглянемо цей код ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
Коли називається doSomething (), він знає, що він повинен запустити транзакцію в базі даних перед виконанням. Якщо абонент цього методу вже запустив транзакцію, то цей метод буде використовувати ту саму фізичну транзакцію у поточному підключенні до бази даних.
Це @Transactional
анотація забезпечує засіб повідомляти про ваш код під час його виконання, що він повинен мати транзакцію. Він не запуститься без одного, тому ви можете зробити таке припущення у своєму коді, що у вашій базі даних не залишиться неповних даних, або доведеться щось очистити, якщо трапляється виняток.
Управління транзакціями є досить складною темою, тому, сподіваємось, ця спрощена відповідь корисна
@Transactional
до свого сервісного рівня, більше не потрібно додавати @Transactional
до методів DAO, що викликаються в рамках цієї транзакції.
doSomething()
викликає інший вкладений метод без будь-якого @transactional, чи буде ця сама транзакція застосовуватися і до цього методу виклику?
Якщо у весняних додатках увімкнено підтримку транзакцій на основі анотацій, використовуючи <tx:annotation-driven/>
та коментуючи будь-який клас / метод за допомогою @Transactional (propagation = Propagation.REQUIRED), тоді Spring Framework розпочне транзакцію та виконає метод та здійснить транзакцію. Якщо сталася будь-яка програма RuntimeException, транзакція буде повернута назад.
Насправді розповсюдження = розповсюдження.REQUIRED - це рівень поширення за замовчуванням, вам не потрібно чітко згадувати про це.
Для отримання додаткової інформації: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
Щоб зрозуміти різні настройки транзакцій та поведінку, прийняті для управління транзакціями, наприклад REQUIRED
, ISOLATION
тощо, вам доведеться зрозуміти основи самого управління транзакціями.
Докладніше про пояснення читайте в службі управління Trasaction .