В Spring Boot Management реализуйте самообвинение платформы ThransactionManager.
public interface platformtransactionManager {org.springframework.transaction.TransactionStatus getTransaction (org.springframework.transaction.TransactionDefinition TransactionDition) throws org.springframework.transaction.TransactionException; void Commit (org.springframework.transaction.TransactionStatus TransactionStatus) бросает org.springframework.transaction.transactionException; void hollback (org.springframework.transaction.transactionStatus transactionStatus) бросает org.springframework.transaction.transactionException;}Когда мы используем зависимость от Spring-Boot-Starter-JDBC, фреймворк автоматически вводит DataSourCetransActionManager по умолчанию. Таким образом, нам не нужна дополнительная конфигурация для использования @transactional Annotation для использования транзакций.
Менеджер транзакций JDBC
В эксплуатации метод, аннотированный @Transactional, будет поддерживать транзакции. Если аннотация находится на классе, все методы всего класса поддержки по умолчанию.
Мульти-транзакционная ситуация
1: Вы можете реализовать интерфейс TransactionManagemageConfigurer, а возвращающим значением метода внутри является диспетчер транзакций по умолчанию.
2: Вы можете установить значение на конкретном методе выполнения
Если в контейнере Spring есть несколько экземпляров PlatformtrancactionManager, а интерфейс TransactionManagementCure не реализован для указания значения по умолчанию, когда мы используем аннотацию @Transactional на методе, мы должны указать его со значением. Если это не указано, будет брошено исключение.
//@ounableTransactionManagement // Включите управление транзакциями аннотации, что эквивалентно <TX: Annotation-Driven />@SpringBootApplicationPublic Class ProfileDemoApplication реализует TransactionManagemageNfigurer {@Resource (имя = "TXMANAGER2") Private PlatformTrancemanger Manager2; // Вручную создавать транзакционные диспетчер 1. Структура данных DataSource будет автоматически вводится // В контейнере для пружины мы вручную аннотируем @Bean в первую очередь загружены, и структура не будет переосмыслить другие классы реализации PlatformTrancemangeManager. @Bean (name = "txmanager1") public platformtransactionmanager txmanager (dataSource DataSource) {return New DataSourCetransActionManager (dataSource); } // Создание TransactionManager 2 @bean (name = "txmanager2") public platformtransactionmanager txmanager2 (EntityManagerFactory Factory) {return new JPatransactionManager (Factory); } // Реализовать метод интерфейса TransactionManagemageNfigurer, возвращаемое значение которого представляет менеджер транзакций, используемый по умолчанию, если у вас есть несколько менеджеров по транзакциям @Override public PlatformTransactionManager AnnotationDriventRansactionManager () {return txmanager2; } public static void main (string [] args) {springApplication.run (profiledemoApplication.class, args); }}Конкретная реализация
@Componentpublic class devsendmessage реализует sendmessage {// использовать значение, чтобы указать, какой менеджер транзакций использовать @transactional (value = "txmanager1") @override public void send () {system.out.println (">>>>>>>>>>> dev () <) <<<<<< •"); send2 (); } @Transactional public void send2 () {system.out.println (">>>>>>>>>>> dev send2 () <<<<<<<<"); }}Уровень изоляции
Общедоступное enum изоляция {по умолчанию (transactionDefinition.isolation_default), read_uncommitted (transactiondefinition.isolation_read_uncommitted), read_committed (transactionDefinition.isolation_Read_committed), repectable_read (transactionDefinition.isolation_Reatable_Read) Serializable (TransactionDefinition.isolation_Serializable); частная конечная стоимость; Изоляция (int value) {this.value = value; } public int value () {return this.value; }} Укажите метод: установить с помощью свойства изоляции, например:
@Transactional (изоляция = изоляция.default)
Коммуникационное поведение
Так называемое поведение распространения транзакций относится к тому, что если контекст транзакции уже существует до начала текущей транзакции, существует несколько вариантов, которые могут указать поведение выполнения транзакционного метода.
Мы можем видеть, что org.springframework.transaction.annotation.spropagation перечисление определяет 6 значений перечисления, которые представляют поведение распространения:
Общедоступное распространение enum {требуется (TransactionDefinition.Propagation_Required), поддержка (TransactionDefinition.Propagation_Supports), обязательный (TransactionDefinition.Propagation_Mandatory), Tevall_new (TransactionDefinition.Propagation_Requires_New), Tress_new (TransactionDefinition.propagation_Requires_New), Tress_new (TransactionDefinition.propagation_Requires_New), Not_supported (transactionDefinition.propagation_not_supported), никогда (Never (TransactionDefinition.Propagation_Never), Intest (TransactionDefinition.Propagation_Nestest); частная конечная стоимость; Распространение (int value) {this.value = value; } public int value () {return this.value; }}Требуется: если в настоящее время присутствует транзакция, присоединяйтесь к транзакции; Если в настоящее время нет транзакции, создайте новую транзакцию. значение по умолчанию.
Поддержки: если в настоящее время присутствует транзакция, присоединяйтесь к транзакции; Если в настоящее время нет транзакции, продолжайте работать не транзакционным образом.
Обязательно: если в настоящее время присутствует транзакция, присоединяйтесь к транзакции; Если в настоящее время нет транзакции, исключение брошено. (Вынужден поместить его в транзакцию)
Tress_new: создает новую транзакцию, и если транзакция существует в настоящее время, текущая транзакция будет приостановлена. (Часто используется журналы печати. Даже если предыдущий откат откат обратно, транзакция будет выполнена, и сообщение об ошибке будет записано)
Not_supported: работает не транзакционным образом. Если транзакция существует в настоящее время, текущая транзакция будет приостановлена.
Никогда: не работает не транзакционным образом, бросает исключение, если в настоящее время существует транзакция.
Вложенные: если в настоящее время существует транзакция, создается транзакция для выполнения вложенной транзакции текущей транзакции; Если в настоящее время нет транзакции, значение эквивалентно требуется.
Укажите метод: установить с помощью свойства распространения, например:
@Transactional (распространение = распространение.
Транзакция не ситуация с откатом
Откатитесь, только если возникает необработанное runtimeexception
Исключение, брошенное Catch, будет успешным, когда оба вставки
@Override @transactional public void insertandinsert (персонал) {staffdao.insert (персонал); попробуйте {int i = 1/0; } catch (Exception e) {e.printstackTrace (); } staffdao.insert (персонал); }Добавлено к оператору Catch метода обслуживания уровня: TransactionAseppectsupport.currentTransactionStatus (). SetroLlbackonly (); оператор, ручный откат не будет вставлять данные
@Override @Transactional public void insertAndinsert (персонал) бросает исключение {try {staffdao.insert (персонал); int i = 1/0; staffdao.insert (персонал); } catch (Exception e) {transactionAseppectsupport.currentTransactionStatus (). setrollbackonly (); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.