Spring 프레임워크 코어(3): 트랜잭션 관리 & SSH 통합

16145 단어
프로그램 내 트랜잭션 제어
  • 환경 준비: 사용자 액세스 - Action - 서비스 - Dao
  • 하나의 업무의 성공: 호출된 서비스는 실행에 성공했고 서비스에서 호출된 모든dao가 실행에 성공했다는 것을 의미한다.사무는 서비스 층에서 통일적으로 통제해야 한다.
  • 1) 사무를 적용할 코드가 없음:
  • 2) 시뮬레이션: 서비스에서 두 번의dao를 호출했는데 그 중 하나의dao가 실행에 실패하고 전체 작업이 굴러갔으면 합니다.

  • 개발 단계:
  • 백엔드 환경 준비: 데이터베이스, 테이블/entity/dao/s서비스
  • dao의 실현용 JdbcTemplate
  • 개체 생성이 Spring 컨테이너로 완료됨
  • 트랜잭션 제어 개요
  • 프로그래밍식 사무 제어: 자신의 수동 제어 사무를 프로그래밍식 사무 제어라고 한다.
  • Jdbc 코드: Conn.setAutoCommite(false); //
  • Hibernate 코드: Session.beginTransaction(); //

  • [세립도 사무제어: 지정된 방법, 지정된 방법의 몇 줄에 사무제어를 추가할 수 있다] (유연하지만 개발하기가 비교적 번거롭다. 매번 열고 제출하고 굴러간다.)
  • 성명식 사무 제어: Spring은 사무에 대한 관리를 제공하는데 이것은 명시적인 사무 관리라고 부른다.
  • Spring은 트랜잭션 제어 기능을 제공합니다.사용자가 Spring의 성명식 사무 관리를 사용하려면 설정 파일에 설정하면 됩니다.사용하지 않으려면 설정을 직접 제거합니다.이것은 사무 제어에 대한 최대한의 결합을 실현했다.
  • Spring 성명식 사무관리의 핵심 실현은 Aop[굵은 입도의 사무제어: 전체 방법에만 사무를 적용할 수 있고 방법의 몇 줄에 사무를 적용할 수 없음](aop이 차단한 것이 방법이기 때문)
  • Spring 선언 트랜잭션 관리자 클래스:
  • Jdbc기술: DataSourceTransactionManager
  • Hibernate 기술: HibernateTransactionManager


  • 2> 선언적 트랜잭션 관리
  • 절차: 1)spring-aop 관련 4개의jar 파일 도입 2)aop명칭공간 도입[XML 설정방식 도입 필요] 3)tx명칭공간 도입[사무방식 도입 필요] 도입
  • XML 방식 구현
  • DeptDao.java

  • public class DeptDao {
        //     JdbcTemplate  
        private JdbcTemplate jdbcTemplate;
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
        public void save(Dept dept){
            String sql = "insert into t_dept (deptName) values(?)";
            jdbcTemplate.update(sql,dept.getDeptName());
        }
    }
    
  • DeptService
  • public class DeptService {
        
        //     dao  
        private DeptDao deptDao;
        public void setDeptDao(DeptDao deptDao) {
            this.deptDao = deptDao;
        }
    
        /*
         *     ?
         */
        public void save(Dept dept){
            //      
            deptDao.save(dept);
            
            int i = 1/0; //   :   Service.save()        
            
            //      
            deptDao.save(dept);
        }
    }
    
  • App 테스트 클래스
  • @Test
        public void testApp() throws Exception {
            //    
            ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_tx/bean.xml");
            
            //     
            Dept dept = new Dept();
            dept.setDeptName("  :    ");
            
            DeptService deptService = (DeptService) ac.getBean("deptService");
            deptService.save(dept);
            
        } 
    
  • bean.xml(Spring 선언형 트랜잭션 관리 구성)
  • 
    
        
        
            
            
            
            
            
            
            
            
        
        
        
        
            
        
        
        
        
            
        
     
        
        
            
        
        
        
        
        
            
        
        
        
        
            
                
                
                
            
        
        
        
        
            
            
        
         
    
  • 주해 방식 실현
  • 주석을 사용하여 Spring의 성명식 사무 관리를 실현하여 더욱 간단합니다!
  • 단계: 1) Aop 관련jar 파일 2) bean.xml에서 지정한 주석 방식으로 성명식 사무관리 및 응용된 사무관리자 클래스 3) 사무제어를 추가할 곳에 @Transactional
  • @Transactional 주석: 1) 응용 사무의 주석 2) 방법에 정의: 현재 방법은spring의 성명식 사무 3) 클래스에 정의: 현재 클래스의 모든 방법은Spring 성명식 사무 관리를 적용한다.4) 부모 클래스에 정의: 부모 클래스를 실행할 때 업무를 적용합니다.
  • 샘플 코드:
  • Bean.xm


  • 
    
        
        
            
            
            
            
            
            
            
            
        
        
        
            
        
        
        
            
        
        
        
        
        
         
    
    - DeptService
    
    @Service
    public class DeptService {
        @Resource
        private DeptDao deptDao;
        /*
         *     
         */
        @Transactional
        public void save(Dept dept){
            deptDao.save(dept);
            int i = 1/0;
            deptDao.save(dept);
        }
    }
    

    3 > 트랜잭션 속성
  • 속성 소개
  • readOnly: 읽기 및 쓰기 트랜잭션
  • timeout = -1: 트랜잭션 시간 제한 없음
  • noRollbackFor = ArithmeticException.class: 수학 이상이 발생하면 스크롤하지 않습니다
  • isolation = Isolation.DEFAULT: 트랜잭션 격리 수준, 데이터베이스 기본값
  • propagation = Propagation.REQUIRED: 트랜잭션의 전파 동작
  • 코드 예:
  • @Transactional(
                readOnly = false,  //     
                timeout = -1,       //           
                noRollbackFor = ArithmeticException.class,  //          
                isolation = Isolation.DEFAULT,              //        ,      
                propagation = Propagation.REQUIRED          //        
        )
        public void save(Dept dept){
            deptDao.save(dept);
            int i = 1/0;
            deptDao.save(dept);
        }
    
  • 트랜잭션 전파 행위:
  • Propagation.REQUIRED: 현재 메서드가 트랜잭션 환경에서 실행되어야 함을 지정합니다.현재 실행 방법이 존재하면 현재 작업에 추가됩니다.
  • Propagation.REQUIRES_NEW: 현재 방법이 업무 환경에서 실행되어야 한다는 것을 지정합니다.현재 실행 중인 방법이 존재하면, 업무가 종료됩니다.시종일관 새로운 업무를 시작하고 실행이 끝난 후;방금 끊긴 업무가 계속 실행됩니다

  • 4 > Spring 및 Hibernate 통합
  • Spring과 Hibernate의 통합 관건: 1) Hibernate의SessionFactory 대상은 Spring에 맡기기;2)hibernate 사무는spring의 성명식 사무관리에 맡긴다.
  • SSH 통합:
  • Spring 및 Struts,
  • Spring 및 hibernate 통합

  • SH 통합 단계:
  • jar 패키지 도입:
  • 연결 풀/데이터베이스 드라이브 팩
  • Hibernate 관련jar
  • 스프링 코어 팩(5개)
  • Spring aop 팩(4개)
  • spring-orm-3.2.5.RELEASE.jar:springhibernate에 대한 지원
  • spring-tx-3.2.5.RELEASE.jar: 사무 관련
  • 구성
  • hibernate.cfg.xml
  • bean.xml
  • 구축 환경, 개별 테스트
  • 단계 구현
  • 데이터 액세스 계층: DeptDao
  • public class DeptDao {
        // Spring Hibernate  : IOC    
        private SessionFactory sessionFactory;
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
        //       
        // Spring Hibernate  :      Spring
        public void save(Dept dept) {
            sessionFactory.getCurrentSession().save(dept);
        }
    }
    
  • 서비스 어플리케이션: DeptService
  • public class DeptService {
        private DeptDao deptDao;
        public void setDeptDao(DeptDao deptDao) {
            this.deptDao = deptDao;
        }   
        public void save(Dept dept){
            deptDao.save(dept);
        }
    }
    
  • 테스트 사용 클래스: App
  • public class App {
        //   
        private ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        @Test
        public void testApp() throws Exception {
            DeptService deptServie = (DeptService) ac.getBean("deptService");
            System.out.println(deptServie.getClass());
            
            deptServie.save(new Dept());
        }
    }
    
  • XML 구성 파일:bean.xml 구성(Spring이 SessionFactory를 관리하는 3중 방식)
  • 
    
    
        
        
            
        
        
        
        
            
        
        
        
        
            
            
            
            
            
            
            
            
        
        
        
        
        
        
        
        
        
        
            
            
            
            
            
                
                    org.hibernate.dialect.MySQLDialect
                    true
                    update
                
            
            
            
            
                
                    classpath:cn/itcast/entity/
                
            
        
        
        
        
        
        
            
        
        
        
            
                
            
        
        
        
             
             
        
         
    

    4 > SSH 통합
  • SSH 통합: Spring과 Struts 통합,Spring 및 Hibernate 통합
  • 요구사항: JSP 페이지에 직원 정보 표시(조회)
  • 통합 단계:
  • SSH Jar 파일 도입
  • Struts 코어jar
  • Hibernate 핵심jar
  • Spring
  • 코어 핵심 기능
  • 웹 기반 웹 모듈 지원
  • Aop aop 지원
  • Orm 대 hibernate 지원
  • Jdbc/tx jdbc 지원 팩, 트랜잭션 관련 팩
  • 구성
  • Web.xml:struts기능,spring용기 초기화
  • Struts.xml: 요청 경로와 맵 액션의 관계 설정
  • Spring.xml: IOC 컨테이너 구성
  • bean-base.xml【공용정보】
  • bean-service.xml
  • bean-dao.xml
  • bean-action.xml

  • 개발
  • Entity
  • Dao
  • service
  • action

  • 좋은 웹페이지 즐겨찾기