spring 사 무 를 깊이 이해 하 다.

6458 단어 spring사무.
사무 소개
하나의 일 은 동시에 성공 하거나 동시에 실패 합 니 다.
특성
4.567917.Atomic 원자 성 사 무 는 하나 이상 의 활동 으로 구 성 된 작업 단원 이다.원자 성 확보 사무 중의 모든 조작 이 발생 하거나 발생 하지 않 습 니 다4.567917.Consistent 일치 성 이 업무 가 완성 되면 시스템 은 모델 링 된 업무 가 일치 하 는 상태 에 있 는 지 확인 해 야 한다
  • Isolated 격 리 사 무 는 여러 사용자 가 데 이 터 를 조작 할 수 있 고 모든 사용자 의 조작 은 다른 사용자 와 얽 히 지 않 습 니 다
  • Durable 의 지속 성 은 일단 업무 가 완성 되면 업무 의 결 과 는 지속 되 어야 한다
  • 트 랜 잭 션 격 리 단계
  • DEFAULT 는 바 텀 데이터 베 이 스 를 사용 하여 미리 설 정 된 격 리 등급 을 사용한다
  • READ_UNCOMMITTED(제출 되 지 않 은 데 이 터 를 읽 기)다른 병행 되 지 않 은 데 이 터 를 읽 을 수 있 도록 합 니 다.더러 운 읽 기,중복 읽 기 불가,환 독 문제 가 존재 합 니 다
  • READ_COMMITTED(제출 한 데 이 터 를 읽 습 니 다)는 다른 병렬 트 랜 잭 션 이 제출 한 데 이 터 를 읽 을 수 있 도록 만 허용 합 니 다.더러 운 읽 기 는 피 할 수 있 지만 중복 읽 기와 환 독 은 존재 하지 않 습 니 다
  • REPEATABLE_READ(중복 읽 기 가능)는 업무 가 한 필드 에서 같은 값 을 여러 번 읽 을 수 있 도록 확보 합 니 다.이 업무 가 지속 되 는 동안 다른 업무 가 이 필드 를 업데이트 하 는 것 을 금지 하고 더러 운 읽 기와 중복 읽 기 를 피 할 수 있 지만 환 독 은 존재 합 니 다(Mysql 기본 트 랜 잭 션 격 리 단계)
  • SERIALIZABLE(직렬 화)는 업무 가 한 표 에서 같은 줄 을 읽 을 수 있 도록 확보 합 니 다.이 업무 가 지속 되 는 동안 다른 업무 가 이 표 에 삽입,업데이트,삭제 작업 을 수행 하 는 것 을 금지 합 니 다.모든 병행 문 제 는 피 할 수 있 지만 성능 이 떨 어 집 니 다
  • 전파 행위
  • PROPAGATION_현재 트 랜 잭 션 을 지원 합 니 다.현재 트 랜 잭 션 이 없 으 면 새 트 랜 잭 션 을 만 듭 니 다
  • PROPAGATION_SUPPORTS 는 현재 트 랜 잭 션 을 지원 합 니 다.현재 트 랜 잭 션 이 없 으 면 비 트 랜 잭 션 으로 실 행 됩 니 다
  • PROPAGATION_MANDATORY 는 현재 트 랜 잭 션 을 지원 합 니 다.현재 트 랜 잭 션 이 없 으 면 이상 을 던 집 니 다
  • PROPAGATION_REQUIRED_NEW 새 트 랜 잭 션,현재 트 랜 잭 션 이 존재 한다 면,현재 트 랜 잭 션 을 연결 합 니 다
  • PROPAGATION_NOT_SUPPORTED 는 비 사무 적 인 방식 으로 작업 을 수행 합 니 다.현재 업무 가 존재 하면 현재 업 무 를 연결 합 니 다
  • PROPAGATION_NEVER 는 비 사무 방식 으로 작업 을 수행 하 며,현재 업무 가 존재 하면 이상 을 던 집 니 다
  • PROPAGATION_NESTED 현재 트 랜 잭 션 이 존재 하면 포 함 된 트 랜 잭 션 에서 실 행 됩 니 다.현재 트 랜 잭 션 이 없 으 면 새 트 랜 잭 션 을 만 듭 니 다
  • 읽 기만 하 다
    트 랜 잭 션 은 읽 기 동작 만 수행 합 니 다.
    readOnly=true 는 spring 에 게 현재 사 무 는 읽 기 작업 만 하고 수정 작업 을 하지 않 으 며 데이터베이스 엔진 최적화 에 도움 을 줄 수 있 음 을 알려 줍 니 다.
    주:읽 기 전용 으로 설정 하면 트 랜 잭 션 에서 데 이 터 를 수정 하지 마 십시오.읽 기 전용 작업 을 사용 할 때 spring 은 잠 금 처 리 를 하지 않 습 니 다.데 이 터 를 수정 하면 문제 가 발생 할 수 있 습 니 다.
    트 랜 잭 션 시간 초과
    트 랜 잭 션 시간 이 길 면 스크롤 백 합 니 다.
    스크롤 백 규칙
    rollback-for 는 검사 형 이상 에 대해 제출 하지 않 고 스크롤 백 해 야 한 다 는 것 을 말 합 니 다.(기본 spring 은 모든 실행 시 이상 스크롤 백 합 니 다)
    no-rollback-for 는 이상 한 작업 을 계속 실행 하고 스크롤 백 하지 않 는 것 을 말 합 니 다.
    사무 적 사용
    
    create table user(
     id int primary key AUTO_INCREMENT,
     name varchar(20) not null,
     account double 
     )ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     insert into user (name,account) values('  ',1000);
     insert into user (name,account) values('  ',1000);
    
    <!--    -->
    <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-tx</artifactId>
     <version>4.3.29.RELEASE</version>
    </dependency>
    
    <!--            -->
    <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-jdbc</artifactId>
     <version>4.3.29.RELEASE</version>
    </dependency>
    
    <!-- mysql   -->
    <dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <version>5.1.48</version>
    </dependency>
    주 해 를 사용 하 다
    여기 서 사용 하 는 것 은 spring 의 데이터 원본 입 니 다.
    
    <!--     -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="com.mysql.jdbc.Driver" />
     <property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=utf-8" />
     <property name="username" value="root" />
     <property name="password" value="123456" />
    </bean>
    
    <!--       -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!--        -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    물론 사용 한 주해 이기 때문에 구성 요소 스 캔 을 잊 지 마 세 요.
    
    <context:component-scan base-package="com.zhanghe.study.spring4.beans.tx"/>
    이후 트 랜 잭 션 을 보장 하 는 방법 에@Transactional 을 설정 하고 이 설명 에 해당 하 는 트 랜 잭 션 격 리 단계(isolation),트 랜 잭 션 전파 행위(propagation),이상 실행 스크롤 백(rollback For)을 설정 할 수 있 습 니 다.
    XML 사용
    
    <!--     -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="com.mysql.jdbc.Driver" />
     <property name="url" value="jdbc:mysql://localhost:3306/spring?useUnicode=true&amp;characterEncoding=utf-8" />
     <property name="username" value="root" />
     <property name="password" value="123456" />
    </bean>
    
    <!--       -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!--   xml       -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
     <!--                -->
     <tx:method name="get*" read-only="true"/>
     <tx:method name="find*" read-only="true"/>
     <tx:method name="save*" propagation="REQUIRED"/>
     </tx:attributes>
    </tx:advice>
    
    <!--        ,                -->
    <aop:config>
     <aop:pointcut id="pointCut" expression="execution(* com.zhanghe.study.spring4.beans.tx.UserService.*(..))"/>
     <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
    </aop:config>
    스프링 사무 에 대한 깊이 있 는 이해 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.스프링 사무 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보시 기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기