본문 바로가기

IT/SpringBoot8

MessageSource 기능을 static 메서드로 사용하기 스프링부트에서 개발 진행 시 MessageSource를 구현하여 YMAL에 등록한 메시지를 사용한다. (예를 들면 messageSource.getMessage... 이런 식으로) 그런데 이렇게 되면 메시지를 사용하는 모든 소스에 MessageSource를 의존성 주입을 받아야 하기 때문에 소스코드가 지저분해진다. 그래서 MessageSource를 의존성 주입을 받지 않고, static 메서드로 선언하여 사용하는 방법에 대해 알아볼 것이다. 우선 이번 실습을 진행하기 위해서는 MessageSouruce가 구현되어 있어야 가능하다. MessageSource 구현 : package com.config; import net.rakugakibox.util.YamlResourceBundle; import org.s.. 2022. 3. 18.
Spring Batch 기동 시 JOB 상태를 STARTED에서 FAILED 로 변경하기 이번 글에서는 Spring Batch 기동 시 배치 상태를 STARTED에서 FAILED로 변경하는 방법에 대해 알아볼 것이다. Spring Batch 를 개발하다 보면, 코드 검증 등을 위해서 WAS 재기동하는 경우가 많다. 그런데 Spring Batch의 특정 Job이 실행 중일 때 재기동을 하게 되면 해당 Job은 STARTED 상태로 남아있게 되며, 만약 Job의 중복 실행을 방지하는 코드가 들어가 있게 되면, STARTED 상태인 Job은 실행이 되지 않게 된다. 따라서 매 재기동 시마다 STARTED인 상태의 Job을 FAILED나 COMPLETED 상태로 변경한 후 Job을 실행시켜야 하는 번거로움이 발생한다. 이런 번거로움을 해결하기 위해서는 기동 시 배치 상태를 STARTED에서 FAIL.. 2022. 3. 17.
SqlSessionFactoryBean setMapperLocations에 mapper.xml 여러 개 등록하기 이번 글에서는 스프링부트에서 mybatis 사용 시, SqlSessionFactoryBean의 setMapperLocations 메소드에 mapper.xml을 여러 개 등록하는 방법에 대해 알아볼 것이다. 우선 스프링부트 서비스에서 DB에 접근하기 위해서는 application.yml 파일에 DB 접속정보를 작성하게 되는데, 여러 개의 DB에 접근해야 하는 경우는 별도의 Java Config 작성 후, @MapperScan 어노테이션에 해당 DB 에 접근하는 SQL mapper 인터페이스의 패키지 위치를 작성하고, SqlSessionFactoryBean의 setMapperLocations 메소드로 mapper.xml의 위치를 지정해주게 된다. package com.project.common.config;.. 2022. 3. 17.
QUARTZ 스케쥴러에서 PREV_FIRE_TIME, NEXT_FIRE_TIME, START_TIME 조회하기 QUARTZ 스케쥴러의 테이블 중 QRTZ_TRIGGERS 테이블에는 트리거의 PREV_FIRE_TIME(이전 수행시간), NEXT_FIRE_TIME(다음 수행시간), START_TIME(시작시간) 등이 저장되어 있다. 하지만 데이터가 1970-01-01부터 경과한 밀리세컨드 형식으로 들어가 있기 때문에 해당 컬럼의 데이터를 조회하기 위해서는 아래 쿼리처럼 데이터를 조회해야 한다. SELECT TRIGGER_NAME , TO_CHAR(TO_DATE('19700101', 'yyyymmdd') + (PREV_FIRE_TIME/(24*60*60*1000) + 9/24), 'yyyy/mm/dd hh24:mi:ss') AS PREV_FIRE_TIME , TO_CHAR(TO_DATE('19700101', 'yyyy.. 2022. 3. 3.
[에러 해결]jackson-dataformat-yaml 사용 시 java.lang.NoClassDefFoundError 및 java.lang.NoSuchMethodError 에러 해결 스프링부트 프로젝트에서 log4j2 설정파일을 보통 xml로 설정하는데, xml 대신 yml로 사용할 경우 빌드툴에 jackson-dataformat-yaml 과 jackson-databind를 추가해줘야 한다. 그런데 이 두개의 버전이 불일치할 경우 다음과 같은 에러가 발생한다 Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/std/ToStringSerializerBase 해당 에러가 발생하는 사유는 jackson-dataformat-yaml과 jackson-databind, 그리고 그 밑에 속한 jackson-core와 jackson-annotations의 버전인 불일치하기 때문에 발생하는 문제다. 내가 추가한.. 2021. 6. 8.
스프링부트 Gradle 버전 변경하기 스프링부트 프로젝트를 진행하다보면 Gradle 버전 변경이 필요한 경우가 있다. Gradle 버전을 변경하기 위해선 다음과 같이 진행하면 된다. 1. Gradlew 명령어를 통한 버전 변경 Gradle 버전을 변경하려는 프로젝트로 이동한 후 Gradlew 명령어를 통해 버전을 변경한다. # ./gradlew wrapper --gradle-version [변경버전] 2. 변경된 버전 변경 완료 후 gradle/wrapper/gradle-wrapper.properties에서 변경된 버전을 확인한다. 2020. 4. 5.
스프링부트에 log4j2 적용하기(gradle, log4j2.yml 활용) 이번 글에서는 스프링부트 서비스에서 gradle과 log4j2.yml 파일을 활용하여 log4j2 설정을 진행할 것이다. log4j2는 늘 사용하지만 한번 글로 정리가 필요할 것 같아서 정리해보았다. 설정을 진행하는 스프링부트 버전은 2.2.6 버전이며 gradle은 5.6 버전이다. log4j2 설정을 하기 위해서는 다음과 같은 파일을 수정해야 한다. build.gradle : gradle 설정파일 resources/application.yml : 스프링부트 서비스 설정파일 resources/log4j2.yml : log4j2 설정파일 1. build.gradle build.gradle파일 수정해보자. 두가지를 수정해줘야 하는데, 첫번째는 log4j2에 필요한 의존성을 추가해줘야하고(log4j2, ja.. 2020. 3. 29.