Spring 사무 관리 - 프로 그래 밍 식 사무, 성명 식 사무
29901 단어 Spring
가방 의존
프로젝트 에 사용 되 는 Spring 과 MyBatis 가방 은 다음 과 같 습 니 다.
...
<properties>
<spring-version>4.2.2.RELEASEspring-version>
properties>
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>${spring-version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring-version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring-version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>${spring-version}version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-txartifactId>
<version>${spring-version}version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatis-springartifactId>
<version>1.3.0version>
dependency>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.3.1version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.41version>
dependency>
...
dependencies>
...
2. 프로 그래 밍 식 사무
Spring 프로 그래 밍 식 트 랜 잭 션 관 리 는 인 코딩 방식 으로 트 랜 잭 션 관 리 를 실현 합 니 다. 코드 에 표 시 된 getTransaction (), commt (), roolback () 등 트 랜 잭 션 관리 방법 이 필요 합 니 다. 이러한 Spring 이 제공 하 는 API 를 통 해 트 랜 잭 션 의 실행 을 유연 하 게 제어 할 수 있 습 니 다. 바 텀 에서 Spring 은 이러한 트 랜 잭 션 을 영구적 인 프레임 워 크 에 의뢰 합 니 다.Spring 프로필 config. xml 는 다음 과 같 습 니 다.
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:config.propertiesvalue>
list>
property>
bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${driver}value>
property>
<property name="url">
<value>${url}value>
property>
<property name="username">
<value>${username}value>
property>
<property name="password">
<value>${password}value>
property>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xiaofan.test" />
bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:user_mapper.xml"/>
<property name="configLocation" value="classpath:mybatis_config.xml" />
bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
bean>
<bean id="userService" class="com.xiaofan.test.UserService">
bean>
beans>
PlatformTransactionManager, TransactionDefinition, TransactionStatus 세 개의 인터페이스 에 따라 프로 그래 밍 방식 으로 사무 관 리 를 할 수 있 습 니 다. TransactionDefinition 인 스 턴 스 는 하나의 사 무 를 정의 하 는 데 사 용 됩 니 다. PlatformTransactionManager 인 스 턴 스 용 어 는 사무 관리 작업 을 수행 하고 TransactionStatus 인 스 턴 스 는 업무 상 태 를 추적 하 는 데 사 용 됩 니 다.UserService 서비스 설정 은 다음 과 같 습 니 다.
public class UserService {
@Resource
UserDAO userDAO;
@Resource
DataSource dataSource;
@Resource
PlatformTransactionManager transactionManager;
public void addUser(User user) throws Exception {
TransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
// [1]
userDAO.insert(user);
// [2]
Integer i = null;
if (i.equals(0)) {
}
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
throw e;
}
return;
}
}
Spring 테스트 코드 는 다음 과 같 습 니 다.
@ContextConfiguration(locations = {"classpath:config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class Test extends AbstractJUnit4SpringContextTests{
@Resource
UserService userService;
@org.junit.Test
public void testAdd() {
try {
userService.addUser(new User(null, "LiLei", 25));
} catch (Exception e) {
}
}
}
만약 [2] 에서 이상 을 던 지면 사 무 는 스크롤 백 을 수행 하고 [2] 에서 이상 을 던 지지 않 으 면 집행 기록 삽입 작업 을 제출한다.
다른 프로 그래 밍 식 사무 관리
상기 사무 관리 방식 은 이해 하기 쉽 지만 사무 관리 코드 는 업무 코드 에 흩 어 져 기 존 코드 의 이성 을 파괴 하고 모든 사무 방법 에는 사 무 를 시작 하고 제출 / 스크롤 백 하 는 기능 이 포함 되 어 있 습 니 다. 이 를 바탕 으로 Spring 은 간단 한 모드 리 셋 모드 (TransactionTemplate) 를 제공 합 니 다.config. xml 프로필 에 TransactionTemplate bean 설정 을 추가 합 니 다:
...
"transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
"transactionManager" ref="transactionManager"/>
...
TransactionTemplate 의 execute () 방법 은 TransactionCallback 형식의 매개 변수 가 있 습 니 다. 이 인터페이스 에 서 는 doInTransaction () 방법 을 정의 합 니 다. 익명 내부 의 힘 든 방식 으로 TransactionCallBack 인 터 페 이 스 를 실현 하고 업무 코드 를 doInTransaction () 방법 에 쓸 수 있 습 니 다. 업무 코드 에 서 는 모든 사물 관리 API 를 표시 할 필요 가 없습니다. 이상 스크롤 백 을 제외 하고또한 업무 코드 의 임 의 위치 에서 transactionStatus. setRollback Only () 를 통과 할 수 있 습 니 다.스크롤 백 동작 을 실행 합 니 다.UserService 서비스 코드 변경:
public class UserService {
@Resource
UserDAO userDAO;
@Resource
TransactionTemplate transactionTemplate;
public void addUser(final User user) {
transactionTemplate.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus transactionStatus) {
userDAO.insert(user);
// transactionStatus.setRollbackOnly();
Integer i = null;
if (i.equals(0)) {
}
return null;
}
});
}
}
3. 성명 식 사무
Spring 의 성명 식 사무 관 리 는 AOP 를 바탕 으로 하 는데 그 본질은 목표 방법 이 실행 되 기 전에 차단 하고 방법 이 시작 되 기 전에 사 무 를 만 들 고 방법 을 실행 한 후에 실행 상황 에 따라 사 무 를 제출 하거나 스크롤 백 하 는 것 이다.성명 식 업무 의 가장 큰 장점 은 프로 그래 밍 을 통 해 업 무 를 관리 하지 않 아 도 된다 는 것 이다. 그러면 업무 코드 에 침입 하지 않 고 설정 파일 에서 관련 된 사물 성명 만 하면 업무 규칙 을 업무 논리 에 응용 할 수 있다.프로 그래 밍 식 트 랜 잭 션 에 비해 성명 식 트 랜 잭 션 의 유일한 부족 은 스마트 역할 이 방법 단계 에 있 는 것 입 니 다. 프로 그래 밍 식 트 랜 잭 션 처럼 코드 블록 등급 성명 식 트 랜 잭 션 까지 네 가지 방식 이 있 습 니 다. a. TransactionInterceptor 기반 성명 식 트 랜 잭 션 입 니 다.b. TransactionProxy Factory Bean 기반 성명 식 사무;c. \ 네 임 스페이스 기반 성명 식 사무;d. 레이 블 (@ Transactional) 기반 성명 식 사무.
a. TransactionInterceptor 기반 성명 식 사무
TransactionInterceptor 는 주로 두 가지 속성 이 있 습 니 다. 하 나 는 transaction Manager 로 하나의 사무 관리 자 를 지정 하 는 데 사 용 됩 니 다.다른 하 나 는 transactionAttributes 입 니 다. 키 값 이 맞 는 방식 으로 해당 방법의 사물 속성 을 지정 합 니 다. 그 중에서 키 값 은 어댑터 를 사용 할 수 있 습 니 다.config. xml 프로필 에 TransactionInterceptor 설정 을 추가 합 니 다:
...
id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<prop key="*">PROPAGATION_REQUIREDprop>
property>
id="userService"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
class="com.xiaofan.test.UserService" />
property>
<property name="interceptorNames">
<list>
"transactionInterceptor"/>
list>
property>
...
그 중에서 업무 의 전파 행위 경 계 는 다음 과 같다.
전파 하 다.
기능.
PROPAGATION_REQUIRED
현재 트 랜 잭 션 을 지원 합 니 다. 현재 트 랜 잭 션 이 없 으 면 새 트 랜 잭 션 을 만 듭 니 다.
PROPAGATION_SUPPORT
현재 트 랜 잭 션 을 지원 합 니 다. 현재 트 랜 잭 션 이 없 으 면 비 트 랜 잭 션 으로 실 행 됩 니 다.
PROPAGATION_MANDATORY
현재 트 랜 잭 션 을 지원 합 니 다. 현재 트 랜 잭 션 이 없 으 면 이상 을 던 집 니 다.
PROPAGATION_REQUIRES_NEW
새 트 랜 잭 션, 현재 트 랜 잭 션 이 있 으 면 현재 트 랜 잭 션 을 연결 합 니 다.
PROPAGATION_NOT_SUPPORT
현재 트 랜 잭 션 이 있 으 면 현재 트 랜 잭 션 을 연결 합 니 다.
PROPAGATION_NEVER
비 사무 방식 으로 작업 합 니 다. 현재 사무 가 있 으 면 이상 을 던 집 니 다.
UserService 서비스 코드 변경:
public class UserService {
@Resource
UserDAO userDAO;
public void addUser3(User user) {
userDAO.insert(user);
Integer i = 1;
if (i.equals(0)) {
}
}
}
b. TransactionProxy Factory Bean 기반 성명 식 사무
이상 의 TransactionInterceptor 방식 을 바탕 으로 모든 서비스 bean 은 ProxyFactory Bean 을 설정 해 야 합 니 다. 이 로 인해 설정 파일 이 지루 해 질 수 있 습 니 다. 이 문 제 를 완화 하기 위해 Spring 은 TransactionProxyFactory Bean 기반 의 성명 식 사무 설정 방식 을 제공 합 니 다.config. xml 프로필 에 TransactionProxyFactory Bean 설정 을 추가 합 니 다:
...
"userService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
"target">
"com.xiaofan.test.UserService" />
"transactionManager" ref="transactionManager"/>
"transactionAttributes">
"insert*">PROPAGATION_REQUIRED
"update*">PROPAGATION_REQUIRED
"*">PROPAGATION_REQUIRED
...
UserService 서비스 코드 는 위 와 같 으 니 변경 할 필요 가 없습니다.
c. \ 네 임 스페이스 기반 성명 식 사무
Spring 2. x 는 \ \ 네 임 스페이스 를 도 입 했 습 니 다. \ 네 임 스페이스 의 접점 표현 식 지원 을 추가 하여 성명 식 사 무 는 더욱 강해 집 니 다. 접점 표현 식 을 통 해 모든 업무 클래스 에 대 리 를 만 들 필요 가 없습니다.동적 에이 전 트 를 사용 하기 위해 서 는 먼저 pom 의존 도 를 추가 해 야 합 니 다.
...
org.aspectj
aspectjweaver
1.7.4
...
config. xml 파일 에 다음 설정 을 추가 합 니 다:
...
"userService" class="com.xiaofan.test.UserService">
"userAdvice" transaction-manager="transactionManager">
"*" propagation="REQUIRED"/>
"userPointcut" expression="execution (* com.xiaofan.test.*.*(..))"/>
"userAdvice" pointcut-ref="userPointcut"/>
...
UserService 서비스 코드 는 위 와 같 으 니 변경 할 필요 가 없습니다.
d. 레이 블 기반 (@ Transactional) 성명 식 사무
네 임 스페이스 기반 트 랜 잭 션 설정 방식 을 제외 하고 Spring2. x 는 주 해 를 기반 으로 하 는 방식 도 도입 했다. 주로 @ Transactional 주 해 를 포함 하 는데 인터페이스, 인터페이스 방법, 클래스 와 클래스 의 방법 에 작용 할 수 있다. 클래스 에 사용 할 때 이 유형의 모든 Public 방법 은 이 유형의 트 랜 잭 션 속성 을 가지 고 방법 급 트 랜 잭 션 에 덮어 쓸 수 있다.config. xml 프로필 에 주석 식별 설정 추가:
...
"transactionManager"/>
...
@ Transactional 주 해 는 Public 방법 에 적용 되 어야 합 니 다. 이것 은 AOP 의 본질 에 의 해 결 정 됩 니 다. proctected, private 방법 에 적용 되면 사 무 는 무 시 됩 니 다.UserService 서비스 코드 는 다음 과 같 습 니 다.
public class UserService {
@Resource
UserDAO userDAO;
@Transactional(propagation = Propagation.REQUIRED)
public void addUser4(User user) {
userDAO.insert(user);
Integer i = 1;
if (i.equals(0)) {
}
}
}
@ Transactional 주해 의 전체 속성 정 보 는 다음 표 [1]:
속성 명
기능.
name
여러 트 랜 잭 션 관리자 중 하 나 를 선택 할 트 랜 잭 션 관리 자 를 지정 합 니 다.
propagation
트 랜 잭 션 전파 행위, 기본 값 은 REQUIRED
isolation
트 랜 잭 션 개수, 기본 값 DEFAULT
timeout
트 랜 잭 션 시간 초과, 기본 값 은 - 1 입 니 다.
read-only
읽 기 전용 으로 지정 합 니 다. 기본 값 은 false 입 니 다.
rollback-for
트 랜 잭 션 스크롤 백 을 실행 할 이상 형식 을 지정 합 니 다. 여러 개의 이상 은 쉼표 로 구 분 됩 니 다.
no-rollback-for
지정 한 이상 유형 을 던 지고 스크롤 백 하지 않 습 니 다.
\ \ 네 임 스페이스 와 주 해 를 기반 으로 하 는 트 랜 잭 션 성명 은 각각 장단 점 이 있 습 니 다. \ \ 를 기반 으로 한 설정 은 여러 가지 방법 과 일치 할 수 있 지만 설정 은 주해 방식 이 복잡 합 니 다.주 해 를 바탕 으로 하 는 방식 은 모든 사 무 를 사용 해 야 하 는 방법 이나 유형 에 표시 해 야 하지만 표 시 를 바탕 으로 하 는 방법 은 학습 원가 가 더욱 낮다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.