JPA 3

서버 2대중 1대만 특정 태스크를 (알람) 하도록 하는 법

1차 시도 master_server db 를 만들어서 마스터가 될 ip 정보를 넣어두었다 그리고 서버들은 1분마다 아래 체크를 해서 본인이 마스터인지 확인을 했다 @Transactional(isolation = Isolation.SERIALIZABLE) fun checkIfMasterServer(): Boolean { val masterServerEntity = masterServerRepository.findByIdOrNull(1) ?: MasterServerEntity(1) val expireAt = masterServerEntity.expireAt if (expireAt?.isBefore(LocalDateTime.now()) != false) { masterServerEntity.ip = InetA..

Backend 2022.09.14

[에러해결] Unexpected error occurred in scheduled task

Unexpected error occurred in scheduled task org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only 기존에 스프링부트 + JPA 를 사용해서 백엔드를 구축 중이었당 이번에 주기적인 알람 기능을 구현하면서 @Scheduled 어노테이션을 사용하게 되었고 자연스럽게 @Transactional 어노테이션이 붙어있던 트랜잭션에 @Scheduled 어노테이션을 붙여서 사용하게 되었다 그러나 Unexpected error occurred in scheduled task 에러 발생.. 구글링을 ..

error 2022.09.13

Read-Only 함수에 @Transactional 을 붙여야 하는가?

스프링부트 + JPA 를 쓰다보면 @Transactional 어노테이션을 자주 사용하게 된다 어떠한 로직이 동작하면서 DB 값도 바꿔야 하는 상황일때 해당 로직이 실패하면 DB까지 모두 롤백시킬 심산으로 @Transactional 어노테이션을 활용하고는 했다 그런데 어느날 내가 Transactional 어노테이션을 남용하고 있는건 아닐까..? @Transactional(readOnly = true) 어차피 읽기만 할건데.. 롤백 될일도 없는데.. 이 코드가 과연 맞나..? 싶은 의문이 든다.. 두둥 알고보니 Spring JPA repository base class 가 애초에 모든 메소드들을 read-only transaction 으로 생각한다고 한다 저 코드는 필요 없는것! JPA Buddy 그리고 J..

Backend 2022.09.13