#13 spring transaction : propagation ex init
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
package com.example.springtransaction.propagation;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
@Getter @Setter
|
||||
public class Log {
|
||||
|
||||
@Id @GeneratedValue
|
||||
private Long id;
|
||||
private String message;
|
||||
|
||||
public Log() {
|
||||
}
|
||||
|
||||
public Log(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.example.springtransaction.propagation;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class LogRepository {
|
||||
|
||||
private final EntityManager em;
|
||||
|
||||
@Transactional
|
||||
public void save(Log logMessage) {
|
||||
log.info("log 저장");
|
||||
em.persist(logMessage);
|
||||
|
||||
if (logMessage.getMessage().contains("로그예외")) {
|
||||
log.info("log 저장시 예외 발생");
|
||||
throw new RuntimeException("예외 발생");
|
||||
}
|
||||
}
|
||||
|
||||
public Optional<Log> find(String message) {
|
||||
return em.createQuery("select l from Log l where l.message = :message", Log.class)
|
||||
.setParameter("message", message)
|
||||
.getResultList().stream().findAny();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.example.springtransaction.propagation;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
|
||||
@Entity
|
||||
@Getter @Setter
|
||||
public class Member {
|
||||
|
||||
@Id @GeneratedValue
|
||||
private Long id;
|
||||
private String username;
|
||||
|
||||
public Member() {
|
||||
}
|
||||
|
||||
public Member(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.example.springtransaction.propagation;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class MemberRepository {
|
||||
|
||||
private final EntityManager em;
|
||||
|
||||
@Transactional
|
||||
public void save(Member member) {
|
||||
log.info("member 저장");
|
||||
em.persist(member);
|
||||
}
|
||||
|
||||
public Optional<Member> find(String username) {
|
||||
return em.createQuery("select m from Member m where m.username = :username", Member.class)
|
||||
.setParameter("username", username)
|
||||
.getResultList().stream().findAny();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.example.springtransaction.propagation;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MemberService {
|
||||
|
||||
private final MemberRepository memberRepository;
|
||||
private final LogRepository logRepository;
|
||||
|
||||
public void joinV1(String username) {
|
||||
Member member = new Member(username);
|
||||
Log logMessage = new Log(username);
|
||||
|
||||
log.info("== memberRepository 호출 시작 ==");
|
||||
memberRepository.save(member);
|
||||
log.info("== memberRepository 호출 종료 ==");
|
||||
|
||||
log.info("== logRepository 호출 시작 ==");
|
||||
logRepository.save(logMessage);
|
||||
log.info("== logRepository 호출 종료 ==");
|
||||
}
|
||||
|
||||
public void joinV2(String username) {
|
||||
Member member = new Member(username);
|
||||
Log logMessage = new Log(username);
|
||||
|
||||
log.info("== memberRepository 호출 시작 ==");
|
||||
memberRepository.save(member);
|
||||
log.info("== memberRepository 호출 종료 ==");
|
||||
|
||||
log.info("== logRepository 호출 시작 ==");
|
||||
try {
|
||||
logRepository.save(logMessage);
|
||||
} catch (RuntimeException e) {
|
||||
log.info("log 저장에 실패했습니다. logMessage={}", logMessage.getMessage());
|
||||
log.info("정상 흐름 반환"); }
|
||||
log.info("== logRepository 호출 종료 ==");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user