본문 바로가기
728x90

TIL16

[JPA] BaseTimeEntity @CreatedDate 오류 최근 JPA를 이용하여 진행하고 있는 토이 프로젝트가 있는데 Entity의 생성시간을 자동으로 캐치해서 DB에 기록해주는 @CreatedDate 어노테이션이 제대로 동작하지 않는 문제가 생겼다. 보통 JPA를 사용하면 아래와 같은 entity를 생성하고 생성 시점이나 수정 시점을 자동으로 기록하고 싶은 entity는 해당 entity를 상속하게 하여 간편하게 구현할 수 있다. 그런데 생성시점을 자동 기록해주는 @CreatedDate를 사용한 createdDt 필드가 계속해서 null로 들어가는 문제가 발생했다. @Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) public abstract class BaseTimeEntity.. 2021. 8. 29.
[Java] Spring 다중 profile 설정하기 Spring 프로젝트를 진행하다보면 로컬, 개발, 운영 환경에서 서로 다른 설정값을 넘겨줘야 하는 경우가 있다. 로컬, 개발 환경에서의 DB와 운영 환경에서의 DB를 분리한다던지, 과금이 필요한 외부 api를 사용하는 경우 로컬 환경에서는 더미 api로 요청을 보내는 등의 경우가 그 예이다. Spring을 이용해서 프로젝트를 진행할 경우 application.yml이라는 파일을 통해 설정값을 스프링 프로젝트에 주입해줄 수 있으며 환경별로 다른 값을 넘겨줄 수 있다. 다음은 로컬, 개발, 운영 환경에 서로 다른 DB 커넥션 정보를 넘겨주는 application.yml 파일의 예이다. server: port: 2580 error: whitelabel: enabled: false servlet: encodin.. 2021. 6. 9.
[Java] cron 시간 설정 시 에러 발생 얼마 전, 일괄 작업을 위해 @Scheduled 어노테이션을 이용하여 배치 코드를 사용한 적이 있다. 보통 배치는 주기를 갖고 반복해서 실행되는데 내가 처리하려고 했던 것은 올해 특정일에 딱 한 번만 실행되어야 하는 작업이었고 cron 표현법을 이용하여 다음과 같이 배치 코드를 개발했었다. @Scheduled(cron = "0 10 01 30 05 ? 2021") public void test() { System.out.println("batch Test"); } cron expression(크론 표현식) 위의 Scheduled 어노테이션 옆에 cron으로 몇 가지 숫자가 할당되어 있는 것을 볼 수 있는데 이것이 cron 표현식이다. 스프링 스케줄러에서 cron 표현식은 총 7자리의 숫자들로 시간을 표현.. 2021. 6. 2.
[Java] List.sublist의 사용법과 주의할 점 얼마 전 Batch 로직을 짜면서 길이가 정해져 있지 않은 리스트를 1000개씩 잘라서 특정 메소드를 실행할 일이 있었다. 이런 경우 java.util.List 의 subList() 메소드를 사용하여 손쉽게 리스트를 잘라낼 수 있다. subList 사용법 subList() 메소드는 간단히 두 개의 파라미터만으로 사용할 수 있다. 첫 번째로 잘라낼 배열의 첫 인덱스, 두 번째로 잘라낼 배열의 마지막 인덱스 + 1 값을 넘겨주면 원하는 부분 리스트만을 얻어낼 수 있다. 여기서 주의할 점은 첫 번째 파라미터는 포함이고, 두 번째 파라미터는 포함하지 않는다는 점이다. 코드로 예시를 들면 아래와 같다. List list = Lists.newArrayList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); .. 2021. 5. 31.