찾다
Javajava지도 시간Spring 트랜잭션 관리 관련 소개(코드 포함)

이 글은 Spring 트랜잭션 관리(코드 포함)에 대한 소개를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

트랜잭션

각 부분이 모두 성공하거나 모두 실패하는 논리적 작업 집합

트랜잭션의 특징#🎜 🎜##🎜 🎜#

    일관성: 트랜잭션 전후의 데이터 무결성이 일관되게 유지됨
  • 원자성: 트랜잭션을 분할할 수 없거나 모두 성공할 수 있습니다. 또는 모두 실패
  • 격리: 트랜잭션 실행은 다른 트랜잭션의 영향을 받지 않으며 서로 격리됩니다
  • # 🎜🎜#지속성: 거래가 완료되면 데이터베이스에 저장되며 시스템 충돌의 영향을 받지 않습니다
  • 특성을 충족하지 못해 발생하는 문제# 🎜 🎜#
  • 격리로 인한 문제:

읽기 문제

더티 읽기: 트랜잭션이 아직 읽지 않은 다른 트랜잭션을 읽습니다. 커밋된 데이터

  • 반복 불가능한 읽기: 한 트랜잭션이 다른 트랜잭션에서 제출한

    update
  • 데이터를 읽어 일관되지 않은 쿼리 결과가 발생함# 🎜🎜 #
  • 팬텀 읽기: 하나의 트랜잭션이 다른 트랜잭션 에서 insert

    의 데이터를 읽어 일관성 없는 쿼리 결과가 발생함
  • #🎜🎜 ##🎜 🎜#
  • 쓰기 문제

    작업 손실

읽기 문제 해결#🎜 🎜## 🎜🎜#트랜잭션의 격리 수준 설정
  •    int ISOLATION_DEFAULT = -1;
        int ISOLATION_READ_UNCOMMITTED = 1;
        int ISOLATION_READ_COMMITTED = 2;
        int ISOLATION_REPEATABLE_READ = 4;
        int ISOLATION_SERIALIZABLE = 8;

ISOLATION_DEFAULT: 스프링 기본값을 나타냅니다. 기본 레이어가 사용됩니다. 데이터베이스의 기본 격리 수준입니다. 예를 들어, mysql은 ISOLATION_REPEATABLE_READ를 사용하고 ISOLATION_READ_COMMITTED를 사용합니다

ISOLATION_READ_UNCOMMITTED: 커밋되지 않은 읽기, 읽기 문제를 해결할 수 없음Spring 트랜잭션 관리 관련 소개(코드 포함)

    # 🎜🎜 #ISOLATION_READ_COMMITTED: 커밋된 읽기, 더티 읽기를 해결할 수 있지만 팬텀 읽기 및 반복 불가능한 읽기는 해결할 수 없습니다.
  • ISOLATION_REPEATABLE_READ: 반복 읽기, 더티 읽기 및 반복 불가능한 읽기를 해결할 수 있습니다. reads#🎜🎜 #
  • ISOLATION_SERIALIZABLE: 모든 읽기 문제를 해결할 수 있지만 효율성은 높지 않습니다
  • 거래용 API Spring의 관리
  • PlatformTransactionManager:플랫폼 트랜잭션 관리자

    PlatformTransactionManager는 Spring이 하위 계층에서 트랜잭션을 관리하는 데 사용하는 인터페이스이자 객체입니다.

  • public interface PlatformTransactionManager {
        TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
        void commit(TransactionStatus status) throws TransactionException;
        void rollback(TransactionStatus status) throws TransactionException;
    }

    spring things 공식 웹사이트 주소
더 일반적인 구현 클래스는 다음과 같습니다.

# 🎜 🎜#

DataSourceTransactionManager: 하단 레이어는 JDBC 트랜잭션 관리를 사용합니다

Spring 트랜잭션 관리 관련 소개(코드 포함)

HibernateTransactionManager: 하단 레이어는 Hibernate 트랜잭션 관리를 사용합니다

# 🎜🎜##🎜 🎜#
TransactionDefinition:

트랜잭션 정의: 트랜잭션 관련 정보, 트랜잭션 전파 동작, 격리 수준, 시간 초과 정보, 읽기 전용 여부를 정의할 수 있습니다#🎜 🎜#
    #🎜🎜 #
    package org.springframework.transaction;
    
    //可以看到事物的定义也是一个接口
    public interface TransactionDefinition {
        //事物的传播行为,7种
        int PROPAGATION_REQUIRED = 0;
        int PROPAGATION_SUPPORTS = 1;
        int PROPAGATION_MANDATORY = 2;
        int PROPAGATION_REQUIRES_NEW = 3;
        int PROPAGATION_NOT_SUPPORTED = 4;
        int PROPAGATION_NEVER = 5;
        int PROPAGATION_NESTED = 6;
        
        //事物的隔离级别五种
        int ISOLATION_DEFAULT = -1;
        int ISOLATION_READ_UNCOMMITTED = 1;
        int ISOLATION_READ_COMMITTED = 2;
        int ISOLATION_REPEATABLE_READ = 4;
        int ISOLATION_SERIALIZABLE = 8;
    
        //事物的超时时间,-1代表没有超时时间
        int TIMEOUT_DEFAULT = -1;
    
        int getPropagationBehavior();
    
        int getIsolationLevel();
    
        int getTimeout();
    
        boolean isReadOnly();
    
        String getName();
    }
  1. TransactionStatus: 거래 상태
  2. 거래 상태: 관리 거래 시 거래 상태를 기록하는 객체
  3. # 🎜🎜#

    Spring의 7가지 트랜잭션 유형의 전파 동작
트랜잭션의 전파 동작은 비즈니스 메서드 간의 상호 호출 문제를 해결하는 데 사용됩니다
  • 공식 웹 사이트 포털

    #🎜🎜 #전제 조건:
    메서드 B()에서 메소드 A() 호출

  • 중첩 트랜잭션
    # 🎜🎜#
  • PROPAGATION_NESTED: A 트랜잭션이 있고, 트랜잭션 A가 정상적으로 실행됩니다. 트랜잭션 A의 실행이 완료된 후 저장 지점을 설정하고 작업 B를 수행합니다. B에서 예외가 발생하면 초기 위치로 롤백되거나 저장 지점으로 롤백될 수 있습니다


    #🎜 🎜#

    동일한 트랜잭션에서 작업 보장

PROPAGATION_REQUIRED: 메소드 B가 메소드 A를 호출하고 메소드 A에 트랜잭션이 있는 경우 메소드 B는 해당 트랜잭션을 다음에서 사용합니다. 에이. A에 트랜잭션이 없으면 B는 트랜잭션

PROPAGATION_SUPPORTS를 생성합니다. A에 트랜잭션이 있으면 A에 트랜잭션을 사용합니다. A에 트랜잭션이 없으면 B에는 트랜잭션을 사용하지 마십시오


PROPAGATION_MANDATORY: A에 트랜잭션이 있으면 A에 트랜잭션을 사용하고 A에는 트랜잭션이 없습니다. , 예외 발생

    # 🎜🎜#
  • 작업이 동일한 트랜잭션에 있지 않은지 확인

PROPAGATION_REQUIRES_NEW: 있음 A의 트랜잭션, A 트랜잭션을 일시 중지하고 B에서 열린 트랜잭션에는 자체 작업만 포함됩니다. A에는 트랜잭션이 없으며 B가 생성한 트랜잭션에는 자체 작업만 포함되어 있습니다. 트랜잭션을 사용하지 마세요

*PROPAGATION_NEVER: A 트랜잭션 B에서 예외가 발생했습니다

  • Spring에서는 두 가지 트랜잭션 관리 방법을 제공합니다

  • # 🎜🎜#
  • 선언적 트랜잭션 관리: 코드 처리 대신 Spring 구성 파일에서 선언적 트랜잭션 처리(더 일반적으로 사용됨)

  • 프로그래밍 트랜잭션 관리: 코드 처리 트랜잭션은 프로그램에서 코딩되어야 합니다

    선언적 트랜잭션 관리
xml 기반

    <!--配置事务管理器-->
        <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
            <property name="dataSource" ref="dataSource" ></property>
        </bean>
    <!--配置事务-->
        <tx:advice id="myAdvice" transaction-manager="trancationManager">
            <tx:attributes>
                <!--配置事务传播和事务隔离-->
                <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
                <tx:method name="update*" propagation="REQUIRED"/>
                <tx:method name="delete*" propagation="REQUIRED"/>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="*" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
        <!--事务是利用aop实现的-->
        <aop:config>
            <aop:pointcut id="ponitcut" expression="execution(* com.amber.xml.service.AccountServiceImpl.transferMoney(..))"></aop:pointcut>
            <aop:advisor advice-ref="myAdvice" pointcut-ref="ponitcut" />
        </aop:config>
  • save* 표현 save로 시작하는 메소드는 PROPATATION_REQUIRED 트랜잭션 전파 및 REPEATABLE_READ 트랜잭션 격리를 사용합니다

    基于注解

    <!--配置事务管理器-->
        <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
            <property name="dataSource" ref="dataSource" ></property>
        </bean>
        <!--开启注解事务-->
        <tx:annotation-driven transaction-manager="trancationManager" />

    使用tx:annotation-driven 开启事务的注解后,在使用的时候只需要在类或者方法上加入@Transactional就可以开启注解

    基于xml的事务和基于注解的事务对比

    • 文件配置对比
      事务基于注解简化了xml中的

    • 使用比较
      使用注解必须在类或者方法上添加@Trasactional,如果有多个业务类,则需要在每个业务类上添加
      使用xml只需要在配置文件中配置包名即可

    事务github代码

위 내용은 Spring 트랜잭션 관리 관련 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 博客园에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?Mar 17, 2025 pm 05:46 PM

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까?적절한 버전 및 종속성 관리로 Custom Java 라이브러리 (JAR Files)를 작성하고 사용하려면 어떻게해야합니까?Mar 17, 2025 pm 05:45 PM

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?Mar 17, 2025 pm 05:44 PM

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA (Java Persistence API)를 어떻게 사용하려면 어떻게해야합니까?Mar 17, 2025 pm 05:43 PM

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Mar 17, 2025 pm 05:35 PM

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.