Spring/JPA

태태개발일지 - JPA Auditing

태태코 2024. 10. 22. 16:57
반응형

JPA Auditing

 

계속 사용하다가 까먹어서 글로 정리하려고 한다.

 

 

우선 Auditing 기능을 사용하려면

@EnableJpaAuditing
@SpringBootApplication
public class AdminApplication {

  public static void main(String[] args) {
   SpringApplication.run(AdminApplication.class, args);
  }

}

을 명시해 주어야한다.

 

그리고 Entity 상단에는

@Data
@EntityListeners(AuditingEntityListener.class)
@Table(name = "", catalog = "", schema = "")
public class CtrlInfo {

 

이벤트 리스너를 통해서 AuditingEntityLisener 를 통해서 등록을 해준다.

 

@CreatedBy
@LastModifiedBy
@Column(name = "IPUser", nullable = true)
private String ipUser;

@CreatedDate
@LastModifiedDate
@Column(name = "IPDate", nullable = true)
private LocalDateTime ipDate;

 

그리고 실제 사용하고자 하는 컬럼들에 어너테이션으로 등록하면 되는데 
위와 같이 CreatedBy와 LastModifedBy는 어너테이션만 등록한다고 되지는 않는다.

 

@EnableJpaAuditing(auditorAwareRef = "loginUserAuditorAware")
@SpringBootApplication
public class AdminApplication {

  public static void main(String[] args) {
   SpringApplication.run(AdminApplication.class, args);
  }

}

Auditing옆에 어떤 사용자를 담을 건지 명시를 해주어야하는데

 

@RequiredArgsConstructor
@Component
@Slf4j
public class LoginUserAuditorAware implements AuditorAware<String> {
  
  @Override
  public Optional<String> getCurrentAuditor() {
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

    if(null == authentication || !authentication.isAuthenticated()) {
      return null;
    }

    //사용자 환경에 맞게 로그인한 사용자의 정보를 불러온다.
    CustomUserDetails userDetails = (CustomUserDetails)authentication.getPrincipal();
    return Optional.of(userDetails.getUserId());

  }
}

 

다음과 같이 AuditorAware을 구현하게 되면 위에 명시해준

LoginUserAuditorAware

를 통해 들어갈 수 있다.

 

 

반응형

'Spring > JPA' 카테고리의 다른 글

태태개발일지 - OneToOne  (0) 2024.11.15
태태개발일지 - JPA 연관관계  (0) 2024.11.14
태태개발일지(EVENT)  (1) 2023.12.04
태태개발일지(query method)  (0) 2023.08.21
태태개발일지(연관관계 JPA)  (0) 2023.08.17