일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Web Server
- it
- elasticsearch
- Git
- devops
- Spring
- Spring Boot
- java
- jenkins
- 맛집
- Design Patterns
- ubuntu
- Oracle
- redis
- linux
- 요리
- jsp
- php
- JVM
- IntelliJ
- MySQL
- laravel
- Gradle
- ReactJS
- AWS
- tool
- javascript
- springboot
- Spring Batch
- db
- Today
- Total
아무거나
[spring] 트랜잭션(Transaction) - 2 본문
[spring] 트랜잭션(Transaction) - 2
PlatformTransactionManager 인터페이스 보다 더욱 많이 사용되는 TransactionTemplate에 대해 알아보자.
TransactionTemplate은 PlatformTransactionManager보다 더 간편하게 사용할 수 있다.
1. dao에 트랜잭션 관련 내용 추가
[testDao.java]
....
//PlatformTransactionManager transactionManager;
TransactionTemplate transactionTemplate;
// 트랜잭션 매니저 setter 추가
// public void setTransactionManager( PlatformTransactionManager transactionManager) {
// this.transactionManager = transactionManager;
//}
public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
this.transactionTemplate = transactionTemplate;
}
....
public void buyTest(final TestDto dto) {
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus arg0) {
template.update(new PreparedStatementCreator() {
.... (저장로직)
}
....
2. 스프링 설정파일에 설정(src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml)
[servlet-context.xml]
<beans:bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<beans:property name="transactionManager" ref="transactionManager"></beans:property>
</beans:bean>
<beans:bean name="dao" class="com.javalec.spring_pjt_ex.dao.TicketDao" >
<beans:property name="template" ref="template" />
<beans:property name="transactionTemplate" ref="transactionTemplate" />
</beans:bean>
3. 트랜잭션 전파 속성 (다시 정리 필요 -> 트랜잭션 속성에 대해 알아보자)
* 2개 이상의 트랜잭션이 작동할 때, 기존의 트랜잭션에 참여하는 방법을 결정하는 속성
즉, 트랜잭션 안에서 트랜잭션을 실행하는 경우 등 해당.
- PROPAGATION_REQUIRED(0) : 전체를 롤백(DEFAULT) -> 예를 들어 커다란 쓰레드 안에 작은 쓰레드가 있는데 만약 작은 쓰레드에 문제가 생기면 커다란 쓰레드까지 전부 롤백시킨다.
- PROPAGATION_SUPPORTS(1) : 기존 트랜잭션에 의존 -> 안쪽에 있는 트랜잭션이 바깥쪽의 트랜잭션에 의존한다. 즉, 바깥쪽의 트랜잭션 상태를 따른다.
- PROPAGATION_MANDATORY(2) : 트랜잭션에 꼭 포함 되어야 함(트랜잭션이 있는 곳에서 호출해야 됨) -> 안쪽 트랜잭션을 기준으로해서 바깥쪽에서 트랜잭션이 없고 안쪽은 있는 상황에서 안쪽을 호출하면 에러가 발생
- PROPAGATION_REQUIRES_NEW(3) : 각각 트랜잭션 처리 -> 바깥쪽 안쪽 모두 트랜잭션이 있지만 한쪽에서 에러가 난다고 전부 취소하지 않는다.
- PROPAGATION_NOT_SUPPORTED(4) : 트랜잭션에 포함 하지 않음(트랜잭션이 없는 것과 동일) -> 트랜잭션이 있긴있지만 해당 옵션을 주면 트랜잭션에 전혀 포함시키지 않음.
- PROPAGATION_NEVER(5) : 트랜잭션에 절대 포함 하지 않음.(트랜잭션이 있는 곳에서 호출하면 에러 발생) -> 안쪽에 나를 쓸때 바깥쪽에 트랜잭션이 걸려있으면 쓰지마라.
ex) [src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml]
....
<beans:bean name="transactionTemplate1" class="org.springframework.transaction.support.TransactionTemplate">
<beans:property name="transactionManager" ref="transactionManager" />
<beans:property name="propagationBehavior" value="0"/>
</beans:bean>
....
'Java & Kotlin > Spring' 카테고리의 다른 글
[Spring Boot] *Service로 끝나는 파일만 접근하는 Aspect 적용 (0) | 2020.05.16 |
---|---|
Log4J 에서 isDebugEnabled() 을 사용한 효율적인 리소스 관리 (0) | 2020.05.08 |
[spring] 트랜잭션(Transaction) - 1 (0) | 2019.12.26 |
[spring] JDBC (0) | 2019.12.26 |
[spring] 폼 데이터 값 검증 (0) | 2019.12.25 |